10

jstatを使用して、GC 操作の合計累積時間を取得しています。つまり、GCTです。

したがって、GCT が 2 秒で、JVM プロセスが 60 秒間開始されたと仮定すると、私はクアッド コア サーバーで実行されているので、GC の % は

2 / 60 * 4 = 0.83%

上記の私の計算は正しいですか?

4

4 に答える 4

6

いいえ、この方法では、OS がプログラムの実行を許可した正確な時間がわからないため、計算は正確ではありません。

アプリケーションが GC によって完全に停止された時間 (一時停止時間) を考慮したい場合、次の JVM オプションを使用できます。

-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime

このオプションにより、JVM は次のような内容を stdout に出力します。

Application time: 3.3319318 seconds
Total time for which application threads were stopped: 0.7876304 seconds
Application time: 2.1039898 seconds
Total time for which application threads were stopped: 0.4100732 seconds

次に、アプリケーションが停止された時間を合計し、アプリケーション時間と一時停止時間の合計で割り、ミューテーターの使用率 (アプリケーションが GC によって一時停止されなかった時間の割合) を得ることができます。

http://prefetch.net/blog/index.php/2008/02/18/measuring-the-time-an-application-was-stopped-due-to-garbage-collection/も参照してください。

于 2013-03-09T08:05:03.110 に答える
3

いいえ、そうではありません。計算では、Javaプロセスによる4つのコアすべての使用率が常に100%であると想定しています。

正しい計算はです(time spent in logic) / (time spent in gc)が、最初の情報を取得するには通常、プロファイラーが必要です。

于 2013-03-09T06:29:19.910 に答える
1

PrintGCDetails-このオプションが役立つ場合があります。すべてのガベージコレクションに関する情報を取得します。

[GC
[PSYoungGen: 99952K->14688K(109312K)]
422212K->341136K(764672K), 0.0631991 secs]
[Times: user=0.83 sys=0.00, real=0.06 secs]

CPU使用率と経過時間の情報を提供します。ユーザーの右側の値は、オペレーティングシステムの外部で命令を実行するガベージコレクションによって使用されるCPU時間です。この例では、ガベージコレクターは0.06秒のユーザーCPU時間を使用しました。sysの右側の値は、ガベージコレクターに代わってオペレーティングシステムが使用するCPU時間です。この例では、ガベージコレクターは、ガベージコレクションに代わってオペレーティングシステム命令を実行するCPU時間を使用しませんでした。realの右側の値は、ガベージコレクションの経過した実時間(秒単位)です。この例では、ガベージコレクションを完了するのに0.06秒かかりました。

Javaパフォーマンス-良い本、デジタル版で見つけることができます。GCの影響の測定に関する優れた記事が含まれています。

于 2013-03-09T09:11:36.493 に答える