コードを変更することなく、起動中のJavaアプリケーションに関するさまざまなトレース情報を取得できる「BTrace」が、Sun Micro-sys-temsのA. Sundararajan氏らによって開発されています。
Solaris 10やMac OS X 10.5にて利用でき、起動プログラムのシステムコールなどを取得できる「DTrace」という技術があります。BTraceは、DTraceのJavaアプリケーションに特化したバージョンといったところでしょう。
BTraceの「B」はBytecodeのことで、Bytecode Instrumentation(バイトコード操作)を使って動的にプローブ(計測ポイント)を仕込みます。ちなみに、バイトコード操作にはASMを使っています。
BTraceはJava 6以上の環境で動作します。jpsコマンドにて起動中のJavaアプリケーションのプロセスIDを調べ、btraceコマンドにてプロセスIDとトレースプログラムを指定することで簡単に利用できます。
図1はJDKのデモに含まれるJava2D.jarを、BTraceのサンプルスクリプトAllMethods.javaでトレースした様子を示しています。AllMethods.javaはリスト1のようなコードで、ご覧のとおりJavaでトレースプログラムを記述できます。
DTraceを使ってJavaアプリケーションを調べる場合は、OSがDTraceをサポートしていること、Dという独自言語を学ぶ必要があること、ExtendedDTraceProbesというVMオプションを付けて起動しなければならないことなど、いくつものハードルがありますが、BTraceは比較的導入しやすいと言えるでしょう。
URL:https://btrace.dev.java.net