安装、文档等问题,看这里。
下面的例子是用SecureCRT进行演示,首先将btrace-bin上传到机器上:
rz
解压之后给btrace执行权限:
sudo chmod +x btrace
下面执行btrace命令来进行监控:
sudo ./btrace `pgrep java` ../samples/OnThrow.java
这次并没有成功,输出信息如下:
12506: Unable to open socket file: target process not responding or HotSpot VM not loaded
首先要明白sudo的是:sudo预设以root的身份运行,而加上-u admin才是以admin的身份运行。
通过ps -aux | grep 12506可以看到服务器是admin启动的,这时候以sudo -u admin去执行脚本就不会有上面的问题了。下面来看一个统计方法执行时间的脚本:
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;
@BTrace
public class TraceMethodTime {
@TLS
static long beginTime;
@OnMethod(
clazz = "java.lang.Throwable",
method = "<init>")
public static void traceExcuteBegin(){
beginTime = timeMillis();
print("beginTime : ");
println(beginTime);
}
@OnMethod(
clazz = "java.lang.Throwable",
method = "<init>",
location = @Location(Kind.RETURN))
public static void traceExcute(){
long endTime = timeMillis();
print("endTime : ");
println(endTime);
print("cost : ");
print(endTime - beginTime);
println("ms");
}
}
其他的脚本写法类似,PS:注意btrace的限制。
---------- ---------- ---------- ---------- END ----------- ---------- ---------- ----------