在eclipse中玩起btrace

来源:互联网 发布:双11销售额包括淘宝吗 编辑:程序博客网 时间:2024/05/29 16:48

Btrace脚本可以让我们在不停止线上系统的情况来动态的添加一些脚本来对系统进行监控和调测,官方教程都是通过命令行来运行btrace脚本。现在我们来看怎么一步一步在eclipse中玩起Btrace,首先上官网https://kenai.com/projects/btrace/下载一个发布包,我 下的时Win平台的。

要在eclipse中玩起btrace,首先在让btrace相关的jar包关联进来,让工程关联上build目录下的btrace-client.jar,接下来些一个btrace脚本,在doc目录下有相关的问题,可以再文档中查看具体注解的含义,下列脚本的用途是用来统计HashMap和ConcurrentHashMap的put方法的执行时间:

@BTracepublic class HashMapMonitor {// private static int callCount = 0;private static long time;private static long time0;@OnMethod(clazz = "java.util.concurrent.ConcurrentHashMap", method = "put", location = @Location(value = Kind.CALL, clazz = "/.*/", method = "/.*/"))public static void startPutOfConcurrentHashMap() {time = timeNanos();}@OnMethod(clazz = "java.util.concurrent.ConcurrentHashMap", method = "put", location = @Location(value = Kind.RETURN, clazz = "/.*/", method = "/.*/"))public static void endPutOfConcurrentHashMap() {long time1 = timeNanos();println(Strings.concat("ConcurrentHashMap:", str(time1 - time)));}@OnMethod(clazz = "java.util.HashMap", method = "put", location = @Location(value = Kind.CALL, clazz = "/.*/", method = "/.*/"))public static void startPutOfHashMap() {time0 = timeNanos();}@OnMethod(clazz = "java.util.HashMap", method = "put", location = @Location(value = Kind.RETURN, clazz = "/.*/", method = "/.*/"))public static void endPutOfHashMap() {long time1 = timeNanos();println(Strings.concat("HashMap:", str(time1 - time0)));}}
正常情况下,脚本应该通过btracec来编译,btrace脚本也是一个有限制的java程序,为了保证系统的安全性,脚本对系统的状态是只读的,所以btrace脚本不能创建对象、数组、捕获异常等,而且脚本中的代码只能调用BTraceUtils或BTraceUtils内部类中的方法,btracec在编译脚本的时候会进行检查是否满足这些限制条件,这块的编译工作也可以通过javac来进行,只是javac不能检查脚本是否满足限制条件,如果脚本不满足条件只有在运行脚本的时候才能暴露出来,这样非常方便,eclipse直接就帮我们搞定了,不用再做额外的操作。

接下来要让脚本和目标程序一起执行,如下操作:

1、Run Configurations-

2、选中左侧的目标程序(没有的话可以创建一个)

3、选中右侧的Arguments

4、在VM Arguments下这样格式的参数:-javaagent:%btrace%\build\btrace-agent.jar=script=%编译后脚本%,debug=truedebug=true时可选,但是建议加上,这样出现问题好排查)在我的机器上该参数为: -javaagent:E:\study\java\btrace\btrace-bin\build\btrace-agent.jar=script=E:\work\workspace\tomcat\Java6_test\bin\cyy\jdk6\test\HashMapMonitor.class,debug=true-》Apply



这样直接运行目标程序之后,btrace脚本也会一起运行,脚本的执行结果在编译后脚本同目录下的.btrace文件,比如我例子中就是HashMapMonitor.class.btrace文件,也可以通过scriptOutputFile参数指定执行结果文件,比如可以把VM参数改成: -javaagent:E:\study\java\btrace\btrace-bin\build\btrace-agent.jar=script=E:\work\workspace\tomcat\Java6_test\bin\cyy\jdk6\test\HashMapMonitor.class,debug=true,scriptOutputFile=xxx

0 0