JMX (分散GCとして知られている) を使用しているときに、RMI によってトリガーされるフル GC の間隔を制御しようとしています。具体的には、次のように Java プラットフォームを起動します。
java -javaagent:../lib/licenceagent.jar=../etc/licence.lic,../etc/publicKeys.store -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:HeapDumpPath=../logs -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:../logs/gc.log -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8004 -Dsun.rmi.dgc.server.gcInterval=7200000 -cp ../lib/myjar.jar:../etc:../data com.acme.myExecutable
ご覧のとおり、サーバーの GC 間隔を 2 時間に設定しました (値はミリ単位です)。結果として、私がオンラインで見たものによると、フル GC (システム) が 2 時間ごとに発生することを期待する必要があります。残念ながら、これは当てはまらないようです。GC ログ ファイルを調べていると、このタイプの GC のデフォルトの間隔であるフル GC (システム) が 1 時間ごとに正確に観察されます。
面白いことに、サーバーの GC 間隔を 1 時間未満の値に設定すると、たとえば、30 秒ごとに GC を実行する 30000 を試してみると、30 秒ごとにフル GC が表示されます。
そのため、デフォルトの間隔を 1 時間未満の値でオーバーライドすると機能するように見えますが、FGC を 1 時間未満の頻度で取得しようとしても機能しません。それは私がオンラインで見たものと矛盾しています。ここでは、人々はこのオプションを介して頻度を制御できるようです.
たとえば、競合が発生した場合に起動オプションを変更したり、起動スクリプトでパラメーターの順序が重要な場合に順序を変更したりするなど、いくつかのことを試しましたが (これが正しいことを知っているわけではありません)、何もしませんでした。誰かが同じ問題を経験したことがあるかどうか、またはこれが機能することを確認するための方法を推奨できるかどうか疑問に思っていましたか?
私のテストは CentOS 64 ビット マシン上にあります。
[root@machine]# java -version
Java バージョン「1.6.0_37」
Java(TM) SE ランタイム環境 (ビルド 1.6.0_37-b06)
Java HotSpot(TM) 64 ビット サーバー VM (ビルド 20.12-b01、混合モード)