我查看我们服务器的状态,半个月发生了900+次full gc,大约20分钟一次full gc,这是正常的吗?或者说优化到多久一次会比较合理?
PHPz2017-04-18 10:50:22
JVM の最適化については何時間でも議論できます。ここでは、体系的な詳細には触れずに、いくつかの簡単な意見を述べます。
最初に: フル GC が頻繁に発生することが問題です。合計メモリと古い世代の設定が小さすぎるかどうかを確認してください。
主にパラメータ -Xmx と -Xmn に依存しますが、小さすぎると必然的に gc が頻繁に発生します。
2 番目: 次のパラメーターを追加します
-verbose.gc -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution - Xloggc:/data/log/xxx/xxx-gc.log -XX:+PrintGCDetails
各 gc 後に古い世代にどのくらいのスペースが残っているかを確認する 一般的に、古い世代のスペースは 2 ~ 2.5 倍に設定されます。 gc 後のメモリはより適切な値です。
同時に、このログを通じて、新しい世代に十分な gc がないまま、古い世代に大量のオブジェクトが入っているかどうかを確認できます。新世代でリサイクルできるオブジェクトが旧世代に入ると必然的にフルGCが多発します
3 番目: コード理由ダンプ メモリ
jmap -dump:live,format=b,file=xx.bin [pid]
次に、MAT (http://www.eclipse.org/mat/) を通してそれを確認します。ツール 解放されていない大きなメモリはどれですか?