VisualVM を使用して、JBoss サーバーで次のヒープ使用量を観察しています。
サーバーは、次の (関連する) JVM オプションで開始されます。
-Xrs -Xms3072m -Xmx3072m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
また、現在、GC ロギングも有効にしています。
-XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:log\gc.log
基本的に、観察されたパターンに満足しています。メモリ リークがないように見えるからです (パターンは何日にもわたって繰り返されます)。
しかし、最適化の余地があるかどうか疑問に思っていますか?
まず、ヒープ使用量が約 2GB に達したときにガベージ コレクションが開始される理由がわかりません。ヒープが 3GB 利用可能になるので、後で開始できるように見えますか?
さらに、観察されたヒープ使用パターンと使用された JVM オプションに関するヒントに興味があります。
観測されたパターンから、使用されている GC 戦略 (UseParallelOldGC) について結論を引き出すことができますか? この戦略は正しいものですか、それとも観測されたヒープ使用量を考慮して別の戦略を使用する必要がありますか?
GC プロセスを最適化して、ヒープ サイズ全体 (3GB) が使用されるようにすることはできますか?
現在、3GB が完全に使用されていないようですが、Xms/Xmx を 2.5GB に減らす必要がありますか?
私が見逃している明らかな GC 最適化はありますか? -XX:NewSize や -XX:NewRatio の調整はお好きですか?
頭に浮かぶ他のヒントはありますか?
ありがとう!