一段btrace代码

Sunday, February 21st, 2010 at 19:37 Leave a comment Go to comments

作者: chua | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.meichua.com/archives/303.html

最近想要优化一下本地cache,不知道数据的使用情况,故写了一个btrace脚本来做分析,也可以顺便熟悉一下强大的btrace
btrace目前已经到了1.0,可以从下面的地址下载:
https://btrace.dev.java.net/files/documents/8510/135506/btrace-bin.tar.gz

以下是今天写的btrace脚本:

import java.util.Map;
 
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.OnEvent;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.OnTimer;
import com.sun.btrace.annotations.Property;
 
/**
 * @author chua 2010-2-20 16:36:44
 */
@BTrace
public class CacheProbe {
 
    @Property
    private static Map map = BTraceUtils.newHashMap();
 
    @OnMethod(
        clazz = "com.meichua.sample.model.Cache", 
        method = "/getAllAttributes|getAllLocators/"
    )
    public static void visitCategory() {
        if (!BTraceUtils.containsKey(map, "category")) {
            BTraceUtils.put(map, "category", "yes");
        }
    }
 
    @OnMethod(clazz = "com.meichua.sample.model.Cache", method = "/getAreaMap|getAreaTree/")
    public static void visitArea() {
        if (!BTraceUtils.containsKey(map, "area")) {
            BTraceUtils.put(map, "area", "yes");
        }
    }
 
    .
    .
    .
 
    @OnEvent
    public static void onEvent() {
        BTraceUtils.println("BTrace probe will print the used original data:");
        BTraceUtils.printMap(map);
        BTraceUtils.println("BTrace program exits!");
        BTraceUtils.exit();
    } 
 
    @OnTimer(1000*60*5)
    public static void ontimer() {
        BTraceUtils.println("--------------------------------------:");
        BTraceUtils.printMap(map);
    }
 
}

@BTrace 这个annotation表明这个类是个btrace的脚本
@Property 这个annotation标注的field是可以在JMX client中,如jconsole中可以看到
@OnMethod 这个annotation标注要监控的类中的方法,我的例子中,是一个正则表达式,当然还可以是更复杂的正则表达式
@OnEvent 这个annotation表明事件处理时,打印map中的内容,这个事件,可以在运行btrace脚本的控制台中用ctrl+c,再选择2触发
@OnTimer 这个annotation是一个定时器,有定义的时间触发一次执行,打印map内容,时间单位是毫秒

另外: map的创建,操作,打印必须有BTraceUtils的方法创建,在一个事件中,不能调用任何自己写的方法
运行: btrace <pid> CacheProbe.java

Categories: base Tags: , , , , ,
  1. No comments yet.
  1. No trackbacks yet.
You must be logged in to post a comment.