转载请注明原链接地址 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=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);
}
}

  

脚本启动命令

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

参考资料

用BTrace排查性能问题

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

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

BTrace User's Guide

btrace 笔记的更多相关文章

  1. btrace 实践笔记

    btrace简介:     btrace 是一个使用在JAVA平台上面的,安全的,动态跟踪工具.它一般用于动态跟踪正在运行的jAVA程序.     使用说明在这里.下载地址在这里.     下载的时候 ...

  2. BTrace使用小结

    简介 BTrace是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目. 典型的使用场景是,“我要查个问题,可那个方法没有打印入口参数和返回结果日志”,“我想看某个方法的执 ...

  3. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  4. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  5. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  9. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

随机推荐

  1. 阿里云服务器CentOS 5.7(64位)安装配置LAMP服务器(Apache+PHP5+MySQL)

    一.快速安装Apache+PHP5+MySql ----------------------------------------------------- 补充:由于163的yum源上只有php5.1 ...

  2. MySQL簇-cluster

    http://www.php100.com/manual/MySQL/ndbcluster.html 先做个标记吧.

  3. Activity的跳转与传值(转载)

    Activity跳转与传值,主要是通过Intent类来连接多个Activity,以及传递数据.   Intent是Android一个很重要的类.Intent直译是“意图”,什么是意图呢?比如你想从这个 ...

  4. 配置mybatis流程

    使用mybatis的优点: 1. 易于上手和掌握. 2. sql写在xml里,便于统一管理和优化. 3. 解除sql与程序代码的耦合. 4. 提供映射标签,支持对象与数据库的orm字段关系映射 5. ...

  5. DM8168 解码显示模块代码阅读分析

    解码/显示概述:从共享文件夹获取H264流,对264流进行解析,生成hdr文件,hdr文件中包含每一帧的信息,将视频帧信息存放在A8核分配的共享内存空间,供其他核或其他的link调用,M3 Video ...

  6. App小样在手机运行了一下

    外包公司把App小样的安装包发过来了,我在安卓手机上试了一把,虽然还只有几个静态页面,但安装那一刻还是小激动了一把. 在某美术系MM的帮助下,我基本掌握了原型软件azure. 事实证明,很多东西都是逼 ...

  7. 配置.NET程序使用代理进行HTTP请求

    方式一:代码方式 var defaultProxy = new WebProxy(); defaultProxy.Address = new Uri("http://proxy:8080&q ...

  8. VS2012中使用纯C实现COM的小问题

    用VS2012新建C++工程都预定义了宏__cplusplus,所以引用到的都是C++的定义.但是要用C实现的话,一般都是也就不是C++的了.比如以下代码: #undef INTERFACE #def ...

  9. POJ_3068_Shortest_pair_of_paths_(最小费用流)

    描述 http://poj.org/problem?id=3068 危险品:N个仓库由M条有向边连接,每条边都有一定费用.将两种危险品从0运到N-1,除了起点和终点外,危险品不能放在一起,也不能走相同 ...

  10. java线程(3)-多线程死锁

    产生死锁的条件: 1.有至少一个资源不能共享2.至少有一个任务必须持有一个资源并且等待获取另一个被别的任务持有的资源3.资源不能任务抢占4.必须有循环等待 package com.thread; /* ...