首页 > 代码库 > btrace 笔记
btrace 笔记
转载请注明原链接地址 http://www.cnblogs.com/dongxiao-yang/p/6134393.html
btrace 是一个可以不用重启线上java业务查问题的神器,记一下自己折腾半天写的几个demo
java业务代码
package com.youku.data.test.kfktest; /** * Hello world! * */ public class App { public static void main(String[] args) throws InterruptedException { System.out.println("Hello World!"); int[] a = new int[] { 20, 21, 21, 21, 22, 19, 24, 27, 20, 34, 23, 20, 17, 21, 20, 18, 19, 20, 24, 20, 23, 22, 27 }; //int s=0; BtraceTest bt = new BtraceTest(); while(true) { for(int i:a) { bt.getret(i); Thread.sleep(100); } Thread.sleep(500); } //System.out.println(s); } }
package com.youku.data.test.kfktest; public class BtraceTest { private long ret = 0; public long getret(int num) { ret += num; // Thread.sleep(10); method1(); method2(); method3(); return ret; } private void method1() { String a = "asdfadsfa" + "sdfasdfdsf"; } private void method2() { double a = 1000 / 3.14; } private void method3() { float a = (float) (1000 / 3.14); } }
btrace 脚本
/* BTrace Script Template */ import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public class TracingScript { /* put your code here */ @TLS private static long startTime = 0; @OnMethod( clazz="com.youku.data.test.kfktest.BtraceTest", method="getret" ) public static void startExecute(){ startTime = timeNanos(); } @OnMethod( clazz="com.youku.data.test.kfktest.BtraceTest", method="getret", location=@Location(Kind.RETURN) ) public static void traceExecute(@Duration long duration,@ProbeMethodName String pmn){ long time = timeNanos() - startTime; println(strcat("duration(nanos): ", str(duration))); println(strcat("execute time(nanos): ", str(time))); println(strcat("ProbeMethodName(pmn): ", str(pmn))); } }
package com.sun.btrace.samples; import com.sun.btrace.BTraceUtils; import com.sun.btrace.Profiler; import com.sun.btrace.annotations.*; @BTrace class Profiling { @Property Profiler swingProfiler = BTraceUtils.Profiling.newProfiler(); @OnMethod(clazz="com.youku.data.test.kfktest.BtraceTest", method="/.*/") void entry(@ProbeMethodName(fqn=true) String probeMethod) { BTraceUtils.Profiling.recordEntry(swingProfiler, probeMethod); } @OnMethod(clazz="com.youku.data.test.kfktest.BtraceTest", method="/.*/", location=@Location(value=http://www.mamicode.com/Kind.RETURN))"Swing performance profile", swingProfiler); } }
脚本启动命令
<style>p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Andale Mono"; color: #00f93e; background-color: #000000 } span.s1 { }</style>./bin/btrace <pid> /Users/dongxiaoyang/Desktop/<btracescript.java>
参考资料
1 用BTrace排查性能问题
2 Btrace入门到熟练小工完全指南
3 使用jvisualvm.exe 的Btrace插件介绍/使用教程
4 BTrace User‘s Guide
btrace 笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。