Javaアプリケーションのイベントが多くない場合、アプリケーションの主なボトルネックは、実行中のコードである可能性があります。 まず、「スレッド」タブを見て、「概要」タブを選択します。 CPU使用率の経時的推移を見ます。 これは、記録されているJVMのCPU使用率とマシン上の総CPU使用率を示しています。 JVMのCPU使用率は低いが、マシンのCPU使用率が高い場合は、他のアプリケーションが多くのCPUを消費していることを意味します。 次に、「システム」タブ・グループの「プロセス」タブで、システム上で実行されている他のアプリケーションを見ます。 ただし、それらのCPU使用率は表示されない場合があるので、多くのCPUを使用しているプロセスを調べるには、Topまたはタスク・マネージャなどのOSツールを使用する方が簡単です。
アプリケーションが多くのCPU時間を使用している場合は、「コード」タブ・グループを選択し、「ホット・スレッド」タブを見てください。 このタブには、最も多くのCPU時間を使用するスレッドが表示されます。 ただし、この情報はメソッド・サンプリングに基づいているので、サンプル数が少ない場合には100%正確でないことがあります。 JFRが実行されているとき、JVMはスレッドをサンプリングします。 デフォルトでは、連続記録ではいくつかのメソッド・サンプリングのみが実行され、プロファイリング記録ではできる限り多く実行されます。 メソッド・サンプリングでは、実際にコードを実行しているスレッドだけからデータを収集します。 I/O待ち、スリープ中、ロック待ちなどのスレッドはサンプリングされません。 したがって、メソッド・サンプルが多いスレッドは、CPU時間を最も多く使用しているスレッドですが、各スレッドがどのくらいのCPUを使用しているかはわかりません。
「コード」タブ・グループの「ホット・メソッド」タブは、アプリケーションが実行時間の大半を費やしている場所を見つけるのに役立ちます。 このタブには、スタックの上位メソッドによりグループ化されたすべてのサンプルが表示されます。 「呼出しツリー」タブを使用して、スタック・トレースの最下位のメソッドから始め、上方に移動します。 図4-6は、Thread.run
から始まり、最も多くサンプリングされている呼出しを示しています。