環境の詳細:OS:Linux RedHat Java:JRE 6 Update 21
アプリに次のGC設定を使用しています。
-server -d64 -Xms8192m -Xmx8192m -javaagent:lib/instrum.jar -XX\:MaxPermSize=256m -XX\:+UseParNewGC -X\:+ParallelRefProcEnabled -XX\:+UseConcMarkSweepGC -XX\:MaxGCPauseMillis=250 -XX\:+CMSIncrementalMode -XX\:+CMSIncrementalPacing -XX\:+CMSParallelRemarkEnabled -verbose\:gc -Xloggc\:/tmp/my-gc.log -XX\:DisableExplicitGC -XX\:+PrintGCTimeStamps -XX\:+PrintGCDetails -XX\:+UseCompressedOops
そこに設定すると、アプリケーションの開始時に単一のフルGCがあります
2.946: [Full GC 2.946: [CMS: 0K->7394K(8111744K), 0.1364080 secs] 38550K->7394K(8360960K), [CMS Perm : 21247K->21216K(21248K)], 0.1365530 secs] [Times: user=0.10 sys=0.04, real=0.14 secs]
その後、4〜5回成功したCMSコレクションが続きますが、この後、ログにCMSの痕跡はなく、マイナーコレクションのみにエントリがあります。
379022.293: [GC 379022.293: [ParNew: 228000K->4959K(249216K), 0.0152000 secs] 7067945K->6845720K(8360960K) icms_dc=0 , 0.0153940 secs]
ヒープは継続的に成長しており、7GBに達しています。OOMや本番システムの故障は許されないため、アプリケーションを再起動する必要があります。
CMSコレクターがクリーニングを停止した理由がわかりません。手がかり/提案は大歓迎です。前もって感謝します。
================================================== ====================================1月23日更新。
これまでのご回答ありがとうございました。テスト環境でアプリケーションをセットアップし、次の一連のJVMオプションを使用してアプリをテストしました。
オプション1
-server -d64 -Xms8192m -Xmx8192m -javaagent\:instrum.jar -XX\:MaxPermSize\=256m -XX\:+UseParNewGC -XX\:+UseConcMarkSweepGC -verbose\:gc -Xloggc\:my-gc.log -XX\:+PrintGCTimeStamps -XX\:+PrintGCDetails
オプション#2
-server -d64 -Xms8192m -Xmx8192m -javaagent\:instrum.jar -XX\:MaxPermSize\=256m -XX\:+UseParNewGC -XX\:+UseConcMarkSweepGC -verbose\:gc -Xloggc\:my-gc.log -XX\:+DisableExplicitGC -XX\:+PrintGCTimeStamps -XX\:+PrintGCDetails
両方の設定で2日間並行してテストを実行しました。これらは私の観察です:
オプション#1ヒープメモリは安定していますが、90個のConcurrentMarkSweepコレクションがあり、JVMは24分を費やしました。それは高すぎます。そして、GCログに次の行が表示され、パターンは1時間ごとに続きます...
318995.941: [GC 318995.941: [ParNew: 230230K->8627K(249216K), 0.0107540 secs] 5687617K->5466913K(8360960K), 0.0109030 secs] [Times: user=0.11 sys=0.00, real=0.01 secs]
319050.363: [GC 319050.363: [ParNew: 230195K->9076K(249216K), 0.0118420 secs] 5688481K->5468316K(8360960K), 0.0120470 secs] [Times: user=0.12 sys=0.01, real=0.01 secs]
319134.118: [GC 319134.118: [ParNew: 230644K->8503K(249216K), 0.0105910 secs] 5689884K->5468704K(8360960K), 0.0107430 secs] [Times: user=0.11 sys=0.00, real=0.01 secs]
319159.250: [Full GC (System) 319159.250: [CMS: 5460200K->5412132K(8111744K), 19.1981050 secs] 5497326K->5412132K(8360960K), [CMS Perm : 72243K->72239K(120136K)], 19.1983210 secs] [Times: user=19.14 sys=0.06, real=19.19 secs]
マークアンドスイープログが同時に表示されません。これは、CMSがスループットコレクターに切り替えられたことを意味しますか?もしそうなら、なぜですか?
オプション#2:
フルGC(システム)ログが表示されるので、-XX \:+DisableExplicitGCを追加することを考えました。ただし、そのオプションを使用すると、収集は行われず、現在のヒープサイズは7.5Gです。私が疑問に思っているのは、CMSが同時収集ではなくフルGCを実行している理由です。