转载请注明原链接地址 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. js函数与变量同名

    console.log(a); var a = 3; function a(){} 输出的结果是:[Function: a] 注意一下几点就能知道原因了! 1)函数声明会置顶2)变量声明也会置顶3)函 ...

  2. const和define的使用区别

    在PHP中(PHP 4及以后),我们可以使用函数define()来定义常量,例如: <?php define('PI',3.14159);  //定义一个名为PI的常量 echo PI;     ...

  3. STM32的GPIO

    一.I/O端口位的基本结构 二.端口位配置表 参考:STM32芯片参考手册

  4. JavaScript 排序算法——快速排序

    常见排序 javaScript 实现的常见排序算法有:冒泡排序.选择排序.插入排序.谢尔排序.快速排序(递归).快速排序(堆栈).归并排序.堆排序. 过程 "快速排序"的思想很简单 ...

  5. 无法修改系统Host的解决办法

    有些时候可能因为杀毒软件的问题,即使打开隐藏文件也是无法正常看到hosts的. 此时可以新建一个hosts文件去覆盖目录下的文件即可见 路径:C:\Windows\System32\drivers\e ...

  6. sqrt和Hailstone

    求平方根 class SqRoot{ void calcRoot(double z){ double x=1;double y=z/x; while(Math.abs(x-y)>1E-10) { ...

  7. CKplayer 新手入门超简单使用教程

    网页播放器都有使用的前提(问1). ~~~~~~~分隔线~~~~~~~ 只需一步先看播放器效果(问2): 下载附件,解压内容(ckplayer文件夹和ckplayer.html)到网站根目录,在浏览器 ...

  8. 单片机系统与标准PC键盘的接口模块设计

    转自单片机系统与标准PC键盘的接口模块设计 概述     在单片机系统中,当输入按键较多时,在硬件设计和软件编程之间总存在着矛盾.对于不同的单片机系统需要进行专用的键盘硬件设计和编程调试,通用性差,使 ...

  9. VMware配置回环地址用于测试

           我们在开发过程中,很可能需要一台服务器用于测试,在这种环境下,我们很可能需要用到vmware来构建这样的开发环境.但如果当前处在一个离线,或是不在网内的环境下,我们所搭建的环境有可能无法 ...

  10. python邮件收发SAMPLE

    #!/usr/bin/env python # -*- encoding: utf-8 -*- import os, socket from time import localtime, strfti ...