jstatを使用して、GC 操作の合計累積時間を取得しています。つまり、GCTです。
したがって、GCT が 2 秒で、JVM プロセスが 60 秒間開始されたと仮定すると、私はクアッド コア サーバーで実行されているので、GC の % は
2 / 60 * 4 = 0.83%
上記の私の計算は正しいですか?
jstatを使用して、GC 操作の合計累積時間を取得しています。つまり、GCTです。
したがって、GCT が 2 秒で、JVM プロセスが 60 秒間開始されたと仮定すると、私はクアッド コア サーバーで実行されているので、GC の % は
2 / 60 * 4 = 0.83%
上記の私の計算は正しいですか?
いいえ、この方法では、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/も参照してください。
いいえ、そうではありません。計算では、Javaプロセスによる4つのコアすべての使用率が常に100%であると想定しています。
正しい計算はです(time spent in logic) / (time spent in gc)
が、最初の情報を取得するには通常、プロファイラーが必要です。
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の影響の測定に関する優れた記事が含まれています。