2

「Full GC (System)」メッセージが 60 分ごとにログに書き込まれているのを確認しました。私がこれを行うとき:

jstat -gccause {pid} 5s 

これは、System.gc() への明示的な呼び出しから来ていることがわかります。System.gc() を呼び出しているコードを追跡しようとしています。これは、自分のコードではなく、依存関係の 1 つで発生していると思われるためです。

-XX:-DisableExplicitGC を使用して明示的な GC 呼び出しを無効にできることはわかっていますが、呼び出しがどこから来ているのかを把握する必要があります。gc() が呼び出されたときにスタック トレースをログに記録するようにこの男がランタイム クラスを変更できたことをここここで読みました。しかし、これを行う方法が明確ではありません。誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

2

Runtime.java のソース コードを取得し、コードを gc() メソッドに追加します。

try {
    throw new Exception("Who is the GC culprit?");
} catch (Exception e) {
    e.printStackTrace();
}

クラスをコンパイルしたら、新しいクラス ファイルで rt.jar を更新します。

于 2013-04-11T20:15:55.930 に答える
0

おそらく、gc() を呼び出すコードを取得する最も簡単な方法は、アプリケーション コードを IDE に配置することです (eclipse または idea ..) すべてのソースをダウンロードし (maven を使用して lib を管理する場合は、おそらく簡単です)、System.gc の参照を見つけます。 () または Runtime.getRuntime.gc()。

于 2013-04-12T06:59:33.910 に答える