JFRの概要とアップデート概要
Java Flight Recorder(JFR)は、Java アプリケーションのパフォーマンス分析や障害調査を目的とする「フライトレコーダー」的なツールで、本番環境でも極めて低オーバーヘッドで継続監視が可能な点が特徴です。
クラウドやコンテナ環境にも対応しており、コンテナのリソース情報なども自動記録することで、「性能低下の原因がコード由来か環境(リソース)由来か」を効率的に切り分けられます。さらに、最近のバージョンでは、詳細なイベントの追加や設定の柔軟性向上が進んでおり、運用時のトラブルシューティングやプロファイリングがより強力かつ扱いやすくなっています。
例えば、Java 25ではJFRの運用価値をさらに高める以下の改善が行われています。本稿では、Java 25 で改善されたポイントに加え、JFR の導入手順から新機能の活用法までを順を追って説明します。
| JEP番号 | 概要 |
|---|---|
| JEP509 | JFR(Java Flight Recorder)CPU時間プロファイリング(実験的ステータス) |
| JEP518 | JFR(Java Flight Recorder)のサンプリング精度改善 |
| JEP520 | JFR(Java Flight Recorder)のメソッドの実行時間計測及びトレース機能の改善 |
JFRによる解析の一連の流れ
JFR を用いたパフォーマンス解析は、主に以下の3つのステップで進行します。
(1)記録の開始
JFRで記録を開始するには、次の2つの方法があります。
- Javaプロセスを起動する際にJVMオプションを指定して開始する方法
- 既に起動しているJavaプロセスに対して、jcmdコマンド(JDKに含まれる診断ツール)を使って記録を指示する方法
起動時オプション指定の方法と比べて、jcmdを利用する方法は後からプロファイリング条件を変えられたり、任意のタイミングで記録を始めたり/止めたりできるため、より柔軟な使い方が可能です。本稿ではjcmdを使った方法を中心に紹介します。
(2)データの取得(プロファイル情報を記録したファイルの作成)
プロファイリングデータ(.jfrファイルなど)が生成される方法として、主に次の2つがあります。
- 記録開始時にあらかじめ指定したファイル名に従って自動的に出力される
- 実行中または記録中のプロセスに対してjcmdを使って、現在までの状況を指定ファイルに書き出す
(3)解析
作成されたプロファイルデータを解析/可視化する主な方法は次のとおりです。
- JDK Mission Control(JMC)ツールを使ってGUIで参照する(別途ダウンロードが必要)
- jfrコマンド(JDKに含まれるコマンドラインツール)を使って参照する
- その他、サードパーティ製プロファイラ(例:IDE内蔵機能など)を使う
この中でも、もっとも視覚的で使いやすいのはJMCです。ダウンロードはJMCの公式ページから可能です。解析画面では、スレッドCPU使用率やヒープイベント、メソッド実行統計などを図1のように確認できます。
