2

Glassfish アプリケーションで 1 時間に 1 回、完全な GC が発生しています。GC ログからの抜粋:

9.210: [Full GC 28311K->27979K(6422528K), 0.3770238 secs]
...
3609.647: [Full GC 1186957K->597880K(6478208K), 4.5102977 secs]
...
7214.192: [Full GC 742184K->595596K(6469504K), 4.3726625 secs]
...
10818.805: [Full GC 756228K->570803K(6455936K), 4.8630472 secs]

Glassfish が稼働している限り、このパターンがほぼ繰り返されます。間の「...」はインクリメンタル GC です。タイミングは非常に疑わしいようです。なぜ 1 時間に 1 回、完全な GC が見られるのでしょうか?

JVM 起動パラメーター:

-Xms6400m
-Xmx6400m
-XX:NewSize=1024m
-XX:MaxNewSize=1024m
-XX:PermSize=256m
-XX:MaxPermSize=1024m
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-Xloggc:C:\glassfish3\glassfish\domains\domain1\logs\gc\gc.log
-XX:+AggressiveOpts
-Xss1024k
-XX:+CMSClassUnloadingEnabled

JVisualVM によると、ヒープ領域が不足することはほとんどありません。

Glassfish 3.1.2.2、Oracle JDK 1.6.0_45、Windows Server 2008

4

2 に答える 2

6

RMI が完全なクリーンアップをトリガーしていると思われます。

http://docs.oracle.com/javase/6/docs/technotes/guides/rmi/sunrmiproperties.html

両方

sun.rmi.dgc.server.gcInterval

到達不能なリモート オブジェクトをアンエクスポートし、適時にガベージ コレクションを実行する必要がある場合、このプロパティの値は、Java RMI ランタイムがローカル ヒープのガベージ コレクション間に許可する最大間隔 (ミリ秒単位) を表します。デフォルト値は 3600000 ミリ秒 (1 時間) です。

sun.rmi.dgc.client.gcInterval

到達不能なリモート参照に対する DGC クリーン コールがタイムリーに配信されるようにする必要がある場合、このプロパティの値は、Java RMI ランタイムがローカル ヒープのガベージ コレクション間で許可する最大間隔 (ミリ秒単位) を表します。デフォルト値は 3600000 ミリ秒 (1 時間) です。

デフォルトは毎時チェックです。

これらは必要ないと思われる方のために、1 日または 1 週間に設定します。

于 2013-06-10T16:43:32.240 に答える
1

明示的な GC ( -XX:+DisableExplicitGC) を無効にして、FullGC がなくなるかどうかを確認することもできます。

于 2013-06-10T17:32:48.500 に答える