10Gのヒープメモリ(メモリ内のデータ構造を表す)を消費するJava Web(Tomcat)アプリケーションがあります。ただし、Xmxを20Gに設定すると機能します。
ヒープメモリをたとえば11Gに設定すると、アプリケーションはすべてのデータをロードできません。連続したフルgcで入力されます。ガベージコレクターも完全なgcを効率的にするためにメモリを必要とするとします。正しいですか?gcの効率的な作業のためにどのくらいのメモリを追加する必要がありますか?ありがとう。
10Gのヒープメモリ(メモリ内のデータ構造を表す)を消費するJava Web(Tomcat)アプリケーションがあります。ただし、Xmxを20Gに設定すると機能します。
ヒープメモリをたとえば11Gに設定すると、アプリケーションはすべてのデータをロードできません。連続したフルgcで入力されます。ガベージコレクターも完全なgcを効率的にするためにメモリを必要とするとします。正しいですか?gcの効率的な作業のためにどのくらいのメモリを追加する必要がありますか?ありがとう。
ロードするデータがたくさんあるので、永続的な生成割り当てを設定すると、より良い結果が得られます。実際、この永続的な生成は、クラスオブジェクトやメソッドオブジェクトなどのVM自体の反射データを保持するために使用されます。これらの反射オブジェクトは永続世代に直接割り当てられ、他の世代とは独立してサイズ設定されます。
-Xms10G -Xmx20G -XX:PermSize=5G -XX:MaxPermSize=12G
最適なOldGenサイズを見つけるには:
GCロギングを有効にする -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
ライブデータサイズの計算=FullGC後の古いOldGenの占有率(詳細については、高度なJVMチューニングを参照してください)。ところで。平均を取得してみてください。数回のFullGCサイクル後のOldGenの占有率を観察することによって。
最適なOldGenSize ==ライブデータサイズの2倍から3倍。