濃縮還元オレンジニュース
DTraceのJava版「BTrace」
コードを変更することなく,起動中の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でトレースプログラムを記述できます。
リスト1 BTraceのトレースプログラムの例
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace public class AllMethods {
@OnMethod(
clazz="/javax\\.swing\\..*/",
method="/.*/"
)
public static void m() {
print(strcat("entered ", name(probeClass())));
println(strcat(".", probeMethod()));
}
}
DTraceを使ってJavaアプリケーションを調べる場合は,OSがDTraceをサポートしていること,Dという独自言語を学ぶ必要があること,ExtendedDTraceProbesというVMオプションを付けて起動しなければならないことなど,いくつものハードルがありますが,BTraceは比較的導入しやすいと言えるでしょう。

