JDK フライト レコーダーは、OpenJDK [1] Java 仮想マシンに組み込まれたイベント レコーダーです。民間航空機のデータ フライト レコーダー (ブラック ボックス) のソフトウェア版と考えることができます。JVM 自体と、JVM で実行されているアプリケーションに関する情報をキャプチャします。キャプチャされるデータは多岐にわたり、たとえば、メソッド プロファイリング、割り当てプロファイリング、ガベージ コレクション関連のイベントなどがあります。JDKフライト レコーダーは、プロファイリングされたシステムでのオブザーバー効果を最小限に抑えるように設計されており、実稼働システムでは常にオンになっています。このテクノロジは 2018 年にオープンソース化されました。
フライト記録の分析と視覚化は通常、JDK Mission Control を使用して行われます。
テクノロジー
記録ファイルは、バイナリ データのチャンクで構成されています。各チャンクは自己記述型で自己完結型です。つまり、データを利用する (イベントを解析するだけでなく、実際に使用する) ために必要なメタデータ (各属性のデータ型やコンテンツ タイプなど) がチャンクに含まれています。また、定数プールなどを通じて解決する必要があるすべての値もチャンクに含まれています。
JFR を効率的にするために、次のようなさまざまなテクノロジが採用されています。
- バイナリ表現、文字列への変換は不要、バッファは効率的にディスクに出力される
- ほとんどのイベントはスレッドローカルのネイティブバッファに記録されます
- いくつかのプラットフォームでは、効率的なタイムスタンプのために不変TSCが採用されている。
- メモリ内およびファイル上のサイズを抑える整数圧縮方式
- JVMで実装されているため、多くのデータがすぐに利用可能であり、データがすぐに利用可能なときに出力されるため、コストが抑えられます。
バイナリ記録をJSONに変換する場合、長さと記録内容によっては、簡単に 2 桁以上サイズが大きくなる可能性があります。
デフォルト テンプレートを使用した JFR の予想されるパフォーマンス オーバーヘッドは 1 パーセント未満であり、プロファイリング テンプレートの場合は 2 パーセント未満です。
歴史
JDK Flight RecorderはJRockit Flight Recorderとして始まり、もともとはJVM自体の改善に使用するデータ収集手段として使用されていました。[2] [3] OracleがSun Microsystemsを買収した後、JRockit Flight RecorderはJava Flight Recorderにブランド名が変更されました。[4] 2018年にJava Flight Recorderはオープンソース化され、OpenJDK 11の一部としてリリースされました。[5]オープンソース化されたとき、Javaの商標問題のため、JDK Flight Recorderにブランド名が変更されました。
バージョン
これらは、利用可能な JFR ファイル形式のバージョンです。これは、これまで存在していたすべてのバージョンを網羅しているわけではなく、HotSpot への移行後に JVM に存在するバージョンを網羅しています。
発達
JDK Flight Recorderの開発はGitHub [7]上のOpenJDK JDK [6]プロジェクトの一環として行われていますが、公開討論のほとんどはOpenJDK hotspot-jfr-dev [8]メーリングリストで行われています。
参照
参考文献
- ^ “OpenJDK” . 2023年6月28日閲覧。
- ^ 「JRockit Flight Recorder ランタイム ガイド」(PDF) 。2019 年1 月 22 日閲覧。
- ^ Oracle JRockit: 決定版ガイド。Packt Pub. 2010. p. 588. ISBN 978-1847198068。
- ^ 「Java Flight Recorder ランタイム ガイド」 。2019年1 月 22 日閲覧。
- ^ 「JEP 328: フライトレコーダー」 。 2019年1月22日閲覧。
- ^ 「OpenJDK JDK プロジェクト」 。2023年6 月 28 日閲覧。
- ^ 「GitHub OpenJDK JDK」 。 2023年6月28日閲覧。
- ^ 「hotspot-jfr-devメーリングリスト」 。 2023年6月28日閲覧。
