xecute", location =@Location(Kind.RETURN))?
? ? public static voidtraceExecute(@ProbeClassName String name,@ProbeMethodName String method,intsleepTime){?
? ? ? ? println(strcat("theclass name=>", name));?
? ? ? ? println(strcat("the classmethod=>", method));?
? ? ? ? println(strcat("theclass method params=>", str(sleepTime)));?
? ? ? ? ?
? ? }?
? ?
? ? @OnTimer(4000)
? ? public static void printMem() {
? ? ? ? println("Heap:");
? ? ? println(Sys.Memory.heapUsage());
? ? ? println("Non-Heap:");
? ? ? println(Sys.Memory.nonHeapUsage());
? ? }
}?
上面源码有几点注意的:
1、 @BTrace 这个annotation表明这个类是btrace脚本,
2、@OnMethod(clazz = " com.btrace.EasyBtraceTest ",method = "execute")
中clazz标明要监控那个类,也可以用正则匹配的方式,method标明要监控类的哪个方法
?
5、运行和具体使用
代码写好了,将EasyBtraceTest程序跑起来,看到每个几秒控制台就会有信息输出:
sleep time is=>3774
sleep time is=>1883
sleep time is=>3863
….
说明程序已经在跑了。
用TraceEasyBtrace.java这个脚本来监控EasyBtraceTest
前提条件:
两个目录:
TraceEasyBtrace.java? 所在的目录,在D:\develop\eclipse\work\performance\src\com\btrace下
JAVA的bin目录下,用JPS查看进程id(应用每次运行可能都会变动,要在本机运行)
我的目录在:
C:\Users\fan>cd C:\Program Files\Java\jdk1.6.0_25\bin
?
获得运行的JAVA的进程ID;
进入命令行:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 MicrosoftCorporation。保留所有权利。
?
C:\Users\fan>cd C:\Program Files\Java\jdk1.6.0_25\bin
?
C:\Program Files\Java\jdk1.6.0_25\bin>jps
7364 EasyBtraceTest
2268
5392
6816 Jps
?
C:\Program Files\Java\jdk1.6.0_25\bin>
?
其中,7364 EasyBtraceTest 就是我们这个应用的PID。
这时候在TraceEasyBtrace.java 所在的目录下运行命令btrace 7364 TraceEasyBtrace.java,结果如下:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 MicrosoftCorporation。保留所有权利。
?
C:\Users\fan>cd C:\Program Files\Java\jdk1.6.0_25\bin
?
C:\Program Files\Java\jdk1.6.0_25\bin>jps
7364 EasyBtraceTest
2268
5392
6816 Jps
?
C:\Program Files\Java\jdk1.6.0_25\bin>d:
?
D:\>cd D:\develop\eclipse\work\performance\src\com\btrace
?
D:\develop\eclipse\work\performance\src\com\btrace>btrace 7364TraceEasyBtrace.java
Heap:
init = 0(0K) used = 1005544(981K) committed = 5177344(5056K) max =66650112(65088K)
Non-Heap:
init = 12746752(12448K) used = 5666640(5533K) committed = 13303808(12992K)max = 100663296(98304K)
the class name=>com.btrace.EasyBtraceTest
the class method=>execute
the class method params=>3011
the class method execute time=>3012
-------------------------------------------
the class name=>com.btrace.EasyBtraceTest
the class method=>execute
the class method params=>2849
the class method execute time=>2850
?…
可以看到每当execute方法执行时,就会打印出一行信息。打印出了类名,方法名,参数,以及这个方法执行的时间。以及内存的使用情况;
这就是一个非常简单的btrace监控,还可以用于数据库执行语句的监控,多线程的监控,WebService的监控等。