0Pricing
Java Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ボトルネックの特定
  2. Java Flight Recorder
  3. JDK Mission Control による分析
  4. よく使う JVM チューニングフラグ
← Java Academyに戻る