0

負荷テスト中に、ノードの 1 つで非常に高いフル GC が観測されました。3 つのグラスフィッシュ ノードを使用しました。他の 2 つのノードでは GC の使用は正常ですが、ノード 1 ではオブジェクトを解放できず、ゆっくりとオブジェクトに到達しXMX settingsます。3 つのノードすべてを確認しましたJVM settings。それらは同じです。検証済みのサーバー ログと 3 つのノードの負荷は同じです。1 つのノードでこの GC の問題が発生し、他のノードでは発生しない理由がわかりません。

JVM 設定:

-XX:+UnlockDiagnosticVMOptions -XX:ParallelGCThreads=8 -XX:MaxPermSize=512m -XX:+AggressiveOpts -XX:NewRatio=2 -XX:+LogVMOutput -XX:+UseParallelGC -XX:LogFile=/opt/glassfish/domains/xyz/logs/jvm.log -Xmx4096m -Xms4096m 

O/S: Red Hat Enterprise Linux Server リリース 5.6 (Tikanga)

JVM Version  
java version "1.6.0_24"  
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)  
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)  

以下は、FULL GC 中の問題のあるノードからの GC のサンプルです。

 323233.103: [Full GC [PSYoungGen: 1305536K->1041065K(1351872K)] [PSOldGen: 2796223K->2796223K(2796224K)] 4101759K->3837289K(4148096K) [PSPermGen: 105778K->105778K(106048K)], 24.3236370 secs] [Times: user=24.32 sys=0.00, real=24.32 secs] 
323264.008: [Full GC [PSYoungGen: 1305536K->1106487K(1351872K)] [PSOldGen: 2796223K->2796223K(2796224K)] 4101759K->3902711K(4148096K) [PSPermGen: 105778K->105778K(106048K)], 22.2367020 secs] [Times: user=22.22 sys=0.01, real=22.24 secs] 
323291.647: [Full GC [PSYoungGen: 1305536K->1106550K(1351872K)] [PSOldGen: 2796223K->2796223K(2796224K)] 4101759K->3902774K(4148096K) [PSPermGen: 105778K->105778K(106048K)], 22.0651020 secs] [Times: user=22.06 sys=0.00, real=22.06 secs] 
323318.604: [Full GC [PSYoungGen: 1305536K->1106756K(1351872K)] [PSOldGen: 2796223K->2796223K(2796224K)] 4101759K->3902980K(4148096K) [PSPermGen: 105778K->105778K(106048K)], 22.4309650 secs] [Times: user=22.42 sys=0.00, real=22.43 secs] 
323345.717: [Full GC [PSYoungGen: 1305536K->1041019K(1351872K)] [PSOldGen: 2796223K->2796223K(2796224K)] 4101759K->3837243K(4148096K) [PSPermGen: 105778K->105778K(106048K)], 24.6671980 secs] [Times: user=24.65 sys=0.00, real=24.66 secs] 
323377.049: [Full GC [PSYoungGen: 1305536K->1102486K(1351872K)] [PSOldGen: 2796223K->2796223K(2796224K)] 4101759K->3898710K(4148096K) [PSPermGen: 105778K->105778K(106048K)], 22.5150360 secs] [Times: user=22.50 sys=0.00, real=22.51 secs] 
4

1 に答える 1

1

トラブルシューティングの 1 つの方法は、古い世代のオブジェクトが何であるかを調べることです。これは、jmap -histoオプションを使用して行うことができます。

プロセスIDを書き留めて実行jpsし、呼び出しjmap -histo pidます。各クラスのオブジェクトの数を取得します。

問題の原因となっているのは、キャッシング/セッション レプリケーション、または 1 つのノードで実行されるバック グラウンド タスクである可能性があります。メモリをいっぱいにしているクラスを見つけると、問題が指摘されます。

于 2012-09-05T17:42:05.410 に答える