萌えハッカーニュースリーダー

2025/03/24 18:23 JEP Draft: JFR Method Timing and Tracing

出典: https://openjdk.org/jeps/8328610
hakase
博士

ロボ子、JDK Flight Recorder (JFR)が拡張されて、バイトコードベースのメソッドタイミングとトレースをサポートするようになるのじゃ!

roboko
ロボ子

それはすごいですね、博士!具体的にはどう変わるんですか?

hakase
博士

サンプルベースではないメソッド呼び出し統計を収集できるようになるのが大きいぞ。特定のメソッドの実行時間やスタックトレースを、ソースコードを変更せずに収集できるのじゃ!

roboko
ロボ子

ソースコードを変更せずに、ですか?それは便利ですね!

hakase
博士

じゃろ?コマンドライン引数とかjcmdコマンド、.jfc設定ファイル、Java Management Extensions (JMX)でメソッドを選択できるのもポイントじゃ。

roboko
ロボ子

柔軟性が高いですね。結果はどうやって確認するんですか?

hakase
博士

記録ファイルに対しては'jfr view'コマンド、ライブJVMに対しては'jcmd JFR.view'コマンドを使うのじゃ。

roboko
ロボ子

なるほど。でも、何か対象外のこともあるんですか?

hakase
博士

メソッドのパラメータとかインスタンス変数の収集は対象外じゃ。JFRが機密情報を抽出するための攻撃ベクトルになる可能性があるからじゃと。

roboko
ロボ子

セキュリティも考慮されているんですね。多数のクラスを同時にトレースするとパフォーマンスが落ちるから、メソッドサンプリングが推奨されるんですね。

hakase
博士

そうそう。メソッド呼び出しのトレースとタイミングは、どのメソッドが呼び出されているか、実行にどれくらいの時間がかかっているか、メソッドが互いにどのように相互作用しているかを理解するのに役立つからの。

roboko
ロボ子

`jdk.MethodTrace`と`jdk.MethodTiming`という新しいイベントとして実装されるんですね。

hakase
博士

`method-trace`オプションは、フィルタに一致するメソッドのスタックトレースを記録して、`method-timing`オプションは、フィルタに一致するメソッドの呼び出し回数と平均実行時間をカウントするのじゃ。

roboko
ロボ子

フィルタは、クラス、クラス-メソッド、メソッド、またはアノテーションにすることができるんですね。複数のフィルタは、セミコロンで区切って指定できる、と。

hakase
博士

その通り!JMXとjdk.management.jfrモジュールのRemoteRecordingStreamクラスを使って、ネットワーク経由で構成することもできるぞ。

roboko
ロボ子

リモートから設定できるのは便利ですね。

hakase
博士

複数のレコーディングが同時に実行されている場合、リモートまたはローカルで開始されたかにかかわらず、すべてのフィルタの和集合が適用される点も覚えておくと良いぞ。

roboko
ロボ子

過剰な数のインストゥルメント化されたメソッドを防ぐために、フィルタ文法はワイルドカードを受け入れないように設計されているんですね。

hakase
博士

そうじゃ。ところでロボ子、JFRの新しい機能を使って、ロボ子の隠しコマンドの実行時間を計測してみるのはどうかの?

roboko
ロボ子

えっ、私に隠しコマンドなんてありましたっけ…?

hakase
博士

冗談じゃ!ロボ子、真面目すぎだぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search