2016-10-24 1 views
0

以下は、JProfilerの「CPUビュー」の「ホットスポット」をサンプリングモードで調べるときのスクリーンショットです。スタックの先頭(CPU使用率の76%)は "java.lang.Thread.run"によって占有されています。HotSpotビューの "java.lang.Thread.run"のセルフタイムが高いのはどういう意味ですか?

私の質問はこれらのスレッドですか?これらは、2番目と3番目の位置から表示される他のホットスポットを担当するスレッドですか(緑色のボックスにマークされています)?または、ガベージコレクションやすべての方法(対応するメソッドはホットスポットのリストに表示されません)のようなバックグラウンドタスクを実行しているこれらのスレッドですか? (JBoss版を含むそれ以外の場合はJavaと、)

enter image description here

+0

なぜ否定的な投票をしていますか?明確にしていただけますか? –

+1

'java.lang.Thread.run'はメソッドであり、通常は'作業するために 'Thread.start'から呼び出されます。プロファイラは、メソッドをまとめてグループ化しています。メソッドとスレッドは異なる概念ですが、メソッドはスレッドに関連していますが、スレッド自体は問題ではありません(スレッドは他の多くのメソッドでもコードを実行します)。つまり、私はその出力についての良い説明はなく、私は他の高いセルフタイムメソッドを期待しています: – user2864740

+1

@ArnabBiswas短命のスレッドをたくさん開始していますか?ほとんどの時間はスレッドを開始するために使用され、実際の作業は行われません。 –

答えて

1

ほとんどのウェブサーバ即ち各HTTP要求が完全に正確に一つのスレッドによって処理され、「一つのスレッド要求ごと」モデルに従います。このスレッドは、多くの場合、DB要求などの処理を待っています。 Webコンテナは必要に応じて新しいスレッドを作成します。

これらのスレッドは、ガベージコレクションアクティビティの責任を負いません。 JVMは常にGCを専用スレッド、つまり「GCスレッド」で実行します。 GCスレッドがアクティブなときはいつでも、利用可能なプロセッサのための実際の「アプリケーションスレッド」と競合し、したがってCPU時間に競合します。

質問に答えるには、はい、ユーザーの要求に対応するすべてのタスクがここで検討されます。言い換えれば、CPUはその時間の76%をユーザー要求を処理するのに費やしています。

ネストされたメソッド呼び出し時間は、イメージに表示された最初のホットスポットに取り込まれます。

+0

グリーンボックス(スタックの下)に表示されているメソッドも、あなたが言及したユーザスレッドによって実行されています。だから、 "java.lang.Thread.run"の自己時間にもそれらのメソッドの自己時間が含まれているかどうかはわかりません。 –

+1

いいえ、それらは含まれていません。関数にネストされた呼び出しがある場合は、 '+'アイコンを展開してそれぞれの時間を表示できます。 – arnabkaycee

関連する問題