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

DTraceのJava版「BTrace」

この記事を読むのに必要な時間:およそ 1 分

コードを変更することなく,起動中の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

著者プロフィール

角田直行(かくだなおゆき)

普段はお仕事でPHPやJavaを使ってWeb開発をしています。一部でセレブエンジニアとか言われてますが,全然セレブじゃありません。

コメント

コメントの記入