前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >btrace 笔记

btrace 笔记

作者头像
sanmutongzi
发布2020-03-05 10:43:11
3990
发布2020-03-05 10:43:11
举报
文章被收录于专栏:stream processstream process

转载请注明原链接地址 http://www.cnblogs.com/dongxiao-yang/p/6134393.html

btrace 是一个可以不用重启线上java业务查问题的神器,记一下自己折腾半天写的几个demo

java业务代码

代码语言:javascript
复制
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);

	}
}
代码语言:javascript
复制
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 脚本

代码语言:javascript
复制
/* 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)));   
   } 
}
代码语言:javascript
复制
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=Kind.RETURN))
    void exit(@ProbeMethodName(fqn=true) String probeMethod, @Duration long duration) { 
        BTraceUtils.Profiling.recordExit(swingProfiler, probeMethod, duration);
    }
    
    @OnTimer(5000)
    void timer() {
        BTraceUtils.Profiling.printSnapshot("Swing performance profile", swingProfiler);
    }
}

脚本启动命令

<!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Andale Mono'; color: #00f93e; background-color: #000000} span.s1 {font-variant-ligatures: no-common-ligatures} -->

./bin/btrace <pid> /Users/dongxiaoyang/Desktop/<btracescript.java>

参考资料

1 用BTrace排查性能问题

2 Btrace入门到熟练小工完全指南

3 使用jvisualvm.exe 的Btrace插件介绍/使用教程

4 BTrace User's Guide

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-12-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档