濃縮還元オレンジニュース

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によるトレース
図1 BTraceによるトレース
リスト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は比較的導入しやすいと言えるでしょう。

URLhttps://btrace.dev.java.net

おすすめ記事

記事・ニュース一覧