JProfiler ヘルプDownload

JProfilerでJFRスナップショットを記録する


JFRをプロダクションJVMで実行することの利点は、オーバーヘッドが最小限であり、プロファイリングインターフェースを有効にする必要がないことです。JProfilerはUIで直接JFR記録をサポートしています。 JFRをプログラムで開始するか、コマンドラインで-XX:StartFlightRecording VMパラメータを追加することもできますが、JProfilerは既に実行中のJVMの記録を開始および停止するのに役立ちます。

JProfilerでJVMにアタッチする際、ネイティブプロファイリングエージェントをロードする代わりに、JFR記録を開始および停止することを選択できます。JProfilerの広範なリモート接続機能を使用すると、たとえば、DockerやKubernetesコンテナで実行されているJVMでJFR記録を開始することができ、コンテナを変更する必要はありません。

JFR記録の開始と停止

スタートセンターの「クイックアタッチ」タブでJVMを選択し、ダイアログの下部にあるStart JFRボタンをクリックします。ローカルで実行中のJVMがスクリーンショットに表示されていますが、同じボタンはリモートJVMにアタッチする際にも使用できます。

JFR設定ウィザードでは、選択したプロセスで使用されているJREのlib/jfrディレクトリから送信されるイベント設定テンプレートの1つを選択できます。デフォルトでは、「default」と「profile」という2つのテンプレートがあり、「profile」はより多くのデータを記録し、オーバーヘッドが増加します。 そのディレクトリに他のファイルを作成すると、ウィザードで対応するテンプレートを選択できるようになります。

これらのテンプレートファイルには、利用可能なイベントと重要な高レベル設定の構成指令が含まれています。各高レベル設定は、さまざまなイベントに結び付けることができます。このUIはテンプレートファイルの内容に基づいて動的に生成されます。異なるプロファイル間を切り替えると、異なるデフォルト値が表示されます。このUIに含まれていない多くのイベントタイプがあり、次のステップでのみ構成可能です。

すでに同じイベントタイプのセットでJVMのJFR記録を開始している場合、JProfilerは最後の設定を使用するオプションを提供します。

そのオプションを選択すると、高レベルの記録設定は利用できなくなり、次のステップに進んで全体の構成を確認し、さらに変更を加えることができます。

ウィザードのこのステップでのもう1つの重要な設定は最大スナップショットサイズです。JFR記録の性質上、スナップショットのサイズは非常に迅速に増加し、ハードディスク全体を埋め尽くす可能性があります。それを避けるために、最大スナップショットサイズの制約は過剰なストレージ使用を防ぎます。最大サイズに達すると、古いイベントは破棄され、新しいイベントは引き続き記録されます。 このプロセスはJFRの自動メカニズムです。

ウィザードの次のステップでは、すべてのイベントタイプのカテゴリ化されたツリーを確認し、右側で各イベントのさらなる構成を行うことができます。

イベントには期間しきい値、各イベントのスタックトレースを記録するかどうかのフラグの設定がある場合があります。期間としきい値は時間単位の設定であり、downキーを押すと利用可能な単位のオートコンプリートポップアップが表示されます。期間はまた、オートコンプリートポップアップからも利用可能な特別な値「everyChunk」、「beginChunk」、「endChunk」をサポートしています。 「チャンク」は、連続したイベントデータとメタデータのセットを保持し、記録における基本的なストレージおよびデータ転送の単位として機能するJFR記録の一部を指します。

ツリーで選択されるイベントが多いほど、記録されるデータが増えます。いくつかのイベントタイプは大量のデータを生成し、いくつかは少量のイベントしか生成しません。

フルプロファイリングモードや「ヒープダンプのみ」モードとは異なり、UIですぐにデータが表示されるわけではありませんが、JFRスナップショットを開始すると、選択されていないときにJVMの背景色が変更され、JProfilerが記録を開始したことがわかります。JVMが選択されている場合、下部のJFRボタンのテキストは記録が停止されることを示します。

JProfilerによって開始されたJFR記録を停止すると、JFRスナップショットが転送され、JProfilerで開かれます。スナップショットは一時的であり、ウィンドウを閉じると削除されます。スナップショットを永続的な場所に保存するには、ツールバーの「スナップショットを保存」アクションを使用してください。

JFR記録を持つ終了したJVM

JFRの使用の1つとして、クラッシュ前の瞬間を調査することが挙げられます。その場合、JVMはJVMテーブルに表示されなくなり、JFR記録を停止してJFRスナップショットを開くことができません。JProfilerでJFR記録が開始され、記録を停止する前にJVMが終了した場合、「Terminated JFR:」というプレフィックスが付いた特別なエントリがJVMテーブルに追加されます。そのエントリをダブルクリックするか、「JFR」ボタンを使用して、JFRスナップショットを開くことができます。

そのようなエントリを開くと、リストから削除されます。手動で停止された記録と同様に、開かれたJFRスナップショットは一時的であり、後で分析するために保持したい場合は保存する必要があります。

外部で開始されたJFR記録の表示

上記の例では、JFR記録はJProfilerで開始および停止されました。JProfilerの外部で開始されたJFR記録も表示できます。連続JFR記録は、次のようなVMパラメータで簡単に開始できます。

"-XX:StartFlightRecording=maxsize=500m=filename=$TEMP/myapp.jfr,name=Continuous recording"

JVMテーブルの特別な背景色による指示は、JProfilerで開始されたJFR記録のみを指します。他の手段でJFR記録が開始されたJVMに接続すると、別のダイアログが表示されます。

JProfilerで新しい記録を開始するか、既存の記録をダンプして結果のJFRスナップショットをJProfilerで表示するかを選択できます。外部で開始されたJFR記録は別のライフサイクルを持ち、JProfilerによって停止されることはありません。