JProfiler ヘルプDownload

JDK Flight Recorder (JFR) のサポート


JDK Flight Recorder (JFR) は、システムレベルのイベントを幅広く記録する構造化されたロギングツールです。航空機のブラックボックスがフライトデータを継続的に記録し、事故調査に使用されるのと同様に、JFR は JVM 内のイベントストリームを継続的に記録し、問題の診断に使用されます。このアプローチの利点は、インシデントに至るまでのシステムの詳細な情報を時系列でキャプチャすることです。JFR はパフォーマンスへの影響を最小限に抑えるように設計されており、長期間にわたって本番環境で安全に実行できます。

Java 17 以降、JFR は JProfiler のデータソースの一つでもあります。JVM のプロファイリングインターフェースを使用するネイティブエージェントに加えて、プロファイリングコンテキストで興味深い JVM の高レベルシステムがあります。一つは JProfiler のいくつかのテレメトリーにデータを提供する MBean システムであり、もう一つは ガベージコレクタープローブ に使用される JFR です。その目的のために、JFR と直接やり取りすることはなく、JProfiler が JFR イベントストリーミングを透過的に処理します。

JProfiler における JFR の統合

JProfiler は JFR 記録 を完全に統合しているため、ローカルマシンまたは JFR 記録が設定されていないリモートマシンで実行中の JVM からデータを簡単にキャプチャできます。

JProfiler UI で JFR スナップショットを開くと、利用可能なビューとセクションは通常のプロファイリングセッションとは異なります。UI の中心は イベントブラウザ です。JFR ビューに利用可能な他のすべてのビューは、別の章で説明されています

イベントタイプを操作し、フィルタを設定し、分析を表示する際に、JProfiler は時折 JFR スナップショットファイルを再スキャンする必要があります。JFR スナップショットファイルは非常に大きくなる可能性があり、すべてのデータをメモリに保持したり、すべての分析を事前に計算したりすることは現実的ではありません。このため、ネットワークドライブから JFR スナップショットを開くことは推奨されません。

非常に大きな JFR スナップショットを開く際には、ファイル選択ダイアログで「分析をカスタマイズ」チェックボックスをクリックし、分析に必要ないイベントカテゴリを除外することで、スナップショット処理を高速化し、メモリ使用量を削減できます。利用可能なイベントカテゴリは、単一のプローブとビューセクションをカバーしています。CPU ビュー、メモリビュー、およびテレメトリービューのイベントタイプはオプションではなく、ロードする必要があります。

例えば、CPU データのみに興味がある場合は、すべてのプローブとイベントブラウザを除外できます。JProfiler は最速の JFR ビューアを目指しており、典型的な JFR スナップショットを迅速に開きますが、JFR 記録は潜在的に無制限であり、開く速度が問題になる可能性がある数十ギガバイトのスナップショットに直面することがあります。

JFR スナップショットのスタックトレース

JFR の重要な機能の一つは、特定のイベントタイプに対して効率的に全スタックトレースを記録する能力です。そのようなイベントタイプでは、JFR 設定でスタックトレース記録を切り替えることができます。多くの JVM アプリケーションイベントタイプ、特にスレッドに関するものは、デフォルトでスタックトレース記録が有効になっています。

JFR は固定の深さまでしかスタックトレースを収集しないため、長いスタックトレースは切り捨てられます。切り捨てられたトレースは理解可能な呼び出しツリーを構築するのに適していないため、これらのトレースは特別にマークされたノードの下に表示されます。

-XX:FlightRecorderOptions=stackdepth=<nnnn>

VM パラメータを使用して、JFR で収集されるトレースのサイズを増やし、アプリケーションの切り捨てられたトレースを排除することができます。