2016-05-30 19 views
2

Oracle Java 8 JVMガベージコレクタのスループットを、最も好ましくはJDKのコマンドラインツールを使用して判断する最も簡単な方法は何ですか?JVM GCのスループットを決定する方法は?

jstatコマンドを使用すると、ガベージコレクションの総時間(GCT列)を取得できます。この値の変更をGCログと比較すると、jstatが出力するGCT値は、JVMの起動以来の累積GC経過時間(秒)です。 これが正しいですか?

このようにGCスループットを計算できますか?

1 - GCT/time_since_jvm_start 

JSTATは、次のコマンドを使用して開始するJVMので、GCと時間の両方を得るために使用することができます。

jstat -gcutil -t <jvm-pid> 1000 1 
+1

GCスループットはどういう意味ですか? GCで過ごした時間の割合を計算しようとしているあなたの質問を読んでいると私には思われますか? –

+0

「HotSpot仮想マシンガベージコレクションチューニングガイド」の定義は次のとおりです。「スループットは、ガベージコレクションに費やされなかった合計時間のうち、長期間に渡って費やされた時間の割合です。一般的には必要ありません)。 – marko

+0

スループットの別の概念は、コアタイムまたはウォールタイムごとに収集されるメガバイトです。とにかく、jstatを使用する代わりに、gcロギングを有効にして[gcviewer](https://github.com/chewiebug/GCViewer)を使用することもできます。 – the8472

答えて

2

は、あなたの質問に正しく設定されています。 GCTカラムには、若いGCとフルGCの両方でガベージコレクションを実行するためにJVMが停止された合計時間が含まれています。

jstat -gcutil -t <jvm-pid> 1000 1)と書いてjstatを使用し、最初の列を見て、JVMが実行された合計時間を確認できます。これをuptimeとしましょう。このタイムスタンプとGC時間は秒単位です。あなたは、あなたが書くとおりに、あなたはどうなるGCで過ごしていない時間の割合を計算したい場合:

1 - GCT/uptime 

私は、このスループットを呼び出すことは少し誤解を招くようであることを主張するだろう。たとえば、CMSコレクタを使用する場合、GCはアプリケーションと並行して行われ、アプリケーションのスループットは低下しますが、実際にはアプリケーションを停止しません。

関連する問題