JDK Mission Control による分析
JFR の記録を読み取ります。
「JDK Mission Control による分析」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
JMCとは
JDK Mission Control (JMC)は、JFRレコーディングを分析するためのグラフィカルツールです。
.jfrファイルを開き、生のイベントを、ホットメソッド、GCの動作、ロック競合、アロケーションなどのナビゲーション可能なビューに変換します。また、問題の可能性を指摘するAutomated Analysisページも備えています。
JMCを入手する
JMCは単体でダウンロードして使うツールです(JDK 8の後にJDKから分離されました)。
AdoptiumまたはOracleのJMCビルドを入手して起動し、File > Open Fileから.jfrファイルを開きます。エージェントもアプリケーションの再起動も必要ありません。すでに取得したレコーディングを分析できます。
Automated Analysisページ
JMCが最初に表示するのはAutomated Analysisです。レコーディングを評価する一連のヒューリスティクスが表示されます。
長いGC一時停止、高いアロケーション、ブロックされたスレッド、プリミティブからオブジェクトへのボックス化などを指摘します。それぞれの検出結果には重大度と短い説明があり、手動で詳しく調べる前の出発点として最適です。
Method Profilingビュー
Method Profilingページは、実行サンプルをコールツリーに集約します。
セルフ時間が最も長いメソッドが、CPUのホットスポットです。トップダウン(呼び出し元から呼び出し先)とボトムアップ(ホットメソッドを先頭)のビューを切り替えることで、何が遅いのかと、どこから呼び出されているのかの両方を理解できます。
フレームグラフ
JMCはスタックサンプルをフレームグラフとして描画します。幅は費やした時間に比例します。
グラフ上部にある幅の広い台地が、CPUが実際に処理に費やしている箇所です。この視覚化により、どの呼び出し経路が支配的なのかが、ソートされた表を読むよりはるかに速く明らかになります。
ガベージコレクションビュー
GCページには、一時停止の継続時間、頻度、実行されたコレクタが表示されます。
レイテンシーに悪影響を与える、長いまたは頻繁な一時停止を探します。高いアロケーションレートは通常、Young世代GCの頻度の高さと相関します。対策はコレクタを変更することではなく、オブジェクトの生成と破棄を減らすことです。
アロケーションのホットスポット
JMCのTLAB Allocationsビューは、オブジェクトが作成されている場所を順位付けします。
これをスタックトレースと組み合わせると、ホットループ内で割り当てを行っている正確な行を見つけられます。バッファを再利用したり、オートボクシングを避けたりするだけで、GCへの負荷を大幅に減らせることがあります。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Autoboxing: each add boxes an int into an Integer object
List<Integer> boxed = new ArrayList<>();
for (int i = 0; i < 5; i++) boxed.add(i);
System.out.println("Boxed " + boxed.size() + " Integers");
System.out.println("JMC allocation view would flag this hotspot");
}
}ロック競合
Lock InstancesビューとJava Monitorビューには、同期処理で待機しているスレッドが表示されます。
多くのスレッドが同じモニターでブロックされている場合、そのロックがスケーラビリティのボトルネックです。JMCは競合しているオブジェクトと待機中のスタックトレースを表示するため、適切なクリティカルセクションを対象にできます。
スレッドとレイテンシーのビュー
Threadsページには、各スレッドのタイムラインが表示されます。CPU上で実行中、パーク中、I/O待ち、またはブロック中の状態を確認できます。
これにより、低速化がCPUバウンドかI/Oバウンドかを確認できます。これはボトルネックのレッスンで扱った区別そのものです。「waiting」の帯が幅広い場合、計算ではなくI/Oまたはロックがボトルネックです。
発見から修正まで
ワークフローは次のとおりです。レコーディングを開き、Automated Analysisを読み、指摘された領域(メソッドプロファイリング、GC、またはロック)を詳しく調べ、フレームグラフとスレッドビューで確認してから仮説を立てます。
1つだけ変更して再度レコーディングし、ベースラインと比較します。JMCはバイナリファイルを実行可能な洞察に変えてくれます。
レコーディングを比較する
最適化の効果を証明するには、「変更前」と「変更後」のレコーディングを比較します。
ベースラインとなるJFRを取得し、1つ変更を加えて別のレコーディングを取得し、両方をJMCで開きます。同じビュー(メソッドプロファイリング、GC、アロケーション)を横に並べて確認します。実際に改善していれば、セルフ時間の短縮、GC一時停止の減少、またはアロケーションレートの低下として現れます。何も変わらなければ、その変更を元に戻します。
クイックチェック
JMCのメソッドプロファイリングとフレームグラフのビューで、メソッドのセルフ時間(または上部にある幅広い台地)は何を示していますか?
まとめ
JMCはJFRレコーディングを読み取り、実際の対策につなげられる形にします:
- Automated Analysisが、問題の可能性を最初に指摘します。
- Method Profilingとフレームグラフが、セルフ時間によってCPUホットスポットを明らかにします。
- GCビューとアロケーションビューが、メモリの生成・破棄の多さを明らかにします。
- ロックビューとスレッドビューにより、CPUバウンドとI/Oまたはロックバウンドを区別できます。
- 詳しく調べ、仮説を立て、1つ修正し、再度レコーディングして比較します。
よくある質問
「JDK Mission Control による分析」レッスンは無料ですか?
はい。「JDK Mission Control による分析」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「JDK Mission Control による分析」で何を学びますか?
JFR の記録を読み取ります。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「JDK Mission Control による分析」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ボトルネックの特定
- Java Flight Recorder
- JDK Mission Control による分析
- よく使う JVM チューニングフラグ