🐱 うさねこ教室 Java・OpenAPI・OpenTelemetry の教室

Part 6

Java の診断とプロファイリング

このパートで学ぶこと

Java アプリケーションの遅延、CPU 使用率、メモリ増加、スレッドの停滞を、推測だけで直すことはできません。 症状に合う診断手段を選び、変更前の記録を残してから原因を絞ります。

このパートでは、JDK 21 に含まれる jcmd と Java Flight Recorder(JFR)、JDK Mission Control(JMC)、async-profiler を扱います。 OpenTelemetry のトレース、メトリクス、ログとプロファイルの役割も区別します。

前提知識

  • Java のコンパイルと JVM の実行モデル(Part 1)
  • メトリクス、ログ、トレース(Part 3、Part 4)
  • レイテンシ、使用率、フレームグラフ(Part 5)

想定所要時間

全 5 章を通して 3〜4 時間 を想定しています。 JDK 21 の標準機能は手元で試せます。 async-profiler の演習には、対応する Linux または macOS 環境と別途ダウンロードした実行ファイルが必要です。

到達目標

  • 症状に応じてデバッガー、スレッドダンプ、JFR、サンプリングプロファイラーを選べる
  • JFR を継続記録し、インシデント時の範囲をファイルへ取り出せる
  • JMC と jfr コマンドで JFR のイベントを調査できる
  • async-profiler で CPU、待機、割り当て、ロックを区別して記録できる
  • Java の診断記録と OpenTelemetry のシグナルを、成熟度を踏まえて組み合わせられる
  1. 症状から診断手段を選ぶ
  2. JFR で実行時イベントを残す
  3. async-profiler で実行スタックを測る
  4. JFR と async-profiler を同じ記録で読む
  5. OpenTelemetry Profiles の現在地