使用btrace来找出执行慢的方法
2017-03-25 11:34
155 查看
转载于:https://shaojun.name/2016/07/260
btrace script
被测试代码:
执行以下代码:
/btrace -cp build 2042 /Users/shaojun/Documents/workspace/btrace/src/MethodTimeCost.java
其中,2042是被测试代码的java进程id
/Users/shaojun/Documents/workspace/btrace/src/MethodTimeCost.java是btrace脚本所在位置
-cp build可以沿用
以下是btrace下载地址:
btrace-bin-1.3.7
btrace script
import static com.sun.btrace.BTraceUtils.name; import static com.sun.btrace.BTraceUtils.print; import static com.sun.btrace.BTraceUtils.println; import static com.sun.btrace.BTraceUtils.probeClass; import static com.sun.btrace.BTraceUtils.probeMethod; import static com.sun.btrace.BTraceUtils.str; import static com.sun.btrace.BTraceUtils.strcat; import static com.sun.btrace.BTraceUtils.timeMillis; import com.sun.btrace.annotations.BTrace; import com.sun.btrace.annotations.Kind; import com.sun.btrace.annotations.Location; import com.sun.btrace.annotations.OnMethod; import com.sun.btrace.annotations.TLS; @BTrace public class MethodTimeCost { @TLS private static long starttime; @OnMethod(clazz="/org\\..*/", method="/.+/",location=@Location(Kind.ENTRY)) public static void startExecute() { starttime = timeMillis(); } @OnMethod(clazz="/org\\..*/", method="/.+/",location=@Location(Kind.RETURN)) public static void endExecute() { long timecost = timeMillis() - starttime; if(timecost > 50) { print(strcat(strcat(name(probeClass()), "."), probeMethod())); print(" ["); print(strcat("Time taken : ", str(timecost))); println("]"); } } }
被测试代码:
package org.shaojun.test; public class MyTest { public static void main(String[] args) { for(int i = 0;i < 100; i++) { Thread t = new Thread() { @Override public void run() { Slow slow = new Slow(); slow.query(); } }; t.start(); } } } package org.shaojun.test; public class Slow { public void query() { while(true) { slow(); } } public void slow() { slow2(); } public void slow2() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("helloworld"); } }
执行以下代码:
/btrace -cp build 2042 /Users/shaojun/Documents/workspace/btrace/src/MethodTimeCost.java
其中,2042是被测试代码的java进程id
/Users/shaojun/Documents/workspace/btrace/src/MethodTimeCost.java是btrace脚本所在位置
-cp build可以沿用
以下是btrace下载地址:
btrace-bin-1.3.7
相关文章推荐
- 使用浏览器远程执行 WebServices 方法!
- 使用Swing Worker线程 --执行后台任务的新方法
- 使用VC创建进程和执行命令行程序的方法
- ClickOnce:部署,强制要求用户使用最新发布版本才可以执行软件的方法
- 在linux下定时执行PHP脚本(定时执行crontab使用方法详解)
- 使用Swing Worker线程 --执行后台任务的新方法
- 使用C语言获取程序的执行时间的方法-clock函数
- 在linux下定时执行PHP脚本(定时执行crontab使用方法详解)
- 执行SQL语句时出现问题操作必须使用一个可更新的查询错误的解决方法
- 定时执行crontab使用方法详解
- 使用Swing Worker线程 --执行后台任务的新方法
- PsTools 的使用方法 psexec是一个远程执行工具,你可以像使用telnet一样使用它。
- 讨论:一个类的方法应该使用返回值来标识执行状态,还是抛出异常?
- 在linux下定时执行PHP脚本(定时执行crontab使用方法详解)
- 定时执行crontab使用方法详解
- 使用浏览器远程执行 WebServices 方法!
- 一个简单的方法:找出哪个的程序使用了哪个端口
- 使用trace方法和trace属性记录Page目录中网页的执行情况
- 使用动态代理记录方法执行的时间
- linux定时执行crontab使用方法