btrace使用

目录btracee是btrace的解压目录

btrace/btrace是btrace的项目工程

root@ubuntu:/usr/local/bogon/btrace# tree btrace
btrace
├── bin
├── btrace-agent.jar
├── btrace-boot.jar
├── btrace-client.jar
└── src
├── btrace
├── HelloWorld.class
├── HelloWorld.java
└── TraceHelloWorld.java 3 directories, 6 files
root@ubuntu:/usr/local/bogon/btrace# cd -
/usr/local/bogon
root@ubuntu:/usr/local/bogon# tree btrace
btrace
├── bin
│   ├── btrace
│   ├── btrace.bat
│   ├── btracec
│   ├── btracec.bat
│   ├── btracer
│   └── btracer.bat
├── btrace
│   ├── bin
│   ├── btrace-agent.jar
│   ├── btrace-boot.jar
│   ├── btrace-client.jar
│   └── src
│   ├── btrace
│   ├── HelloWorld.class
│   ├── HelloWorld.java
│   └── TraceHelloWorld.java
├── btrace-bin.tar.gz
├── btrace.zip
├── build
│   ├── btrace-agent.jar
│   ├── btrace-boot.jar
│   └── btrace-client.jar
├── COPYRIGHT
├── docs

在src目录直接执行btrace pid TraceHelloWorld.java

# ../../bin/btrace 9221 TraceHelloWorld.java
the class name=>HelloWorld
the class method=>execute
the class method params=>1498
the class method execute time=>1499
-------------------------------------------
the class name=>HelloWorld
the class method=>execute
the class method params=>1903
the class method execute time=>1903
-------------------------------------------

如:TraceHelloWorld

# cat TraceHelloWorld.java 

import static com.sun.btrace.BTraceUtils.println;
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.ProbeClassName;
import com.sun.btrace.annotations.ProbeMethodName;
import com.sun.btrace.annotations.TLS;
@BTrace
public class TraceHelloWorld { @TLS
private static long startTime = 0; @OnMethod(clazz = "HelloWorld", method = "execute")
public static void startMethod(){
startTime = timeMillis();
} @OnMethod(clazz = "HelloWorld", method = "execute", location = @Location(Kind.RETURN))
public static void endMethod(){
println(strcat("the class method execute time=>", str(timeMillis()-startTime)));
println("-------------------------------------------");
} @OnMethod(clazz = "HelloWorld", method = "execute", location = @Location(Kind.RETURN))
public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,int sleepTime){
println(strcat("the class name=>", name));
println(strcat("the class method=>", method));
println(strcat("the class method params=>", str(sleepTime))); }
}

比如我这里跟踪Jedis的连接ConnectionTrace

import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.timeMillis; import com.sun.btrace.BTraceUtils.Threads;
import com.sun.btrace.annotations.Export;
import com.sun.btrace.annotations.OnExit;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.Return;
import com.sun.btrace.annotations.Self;
import com.sun.btrace.annotations.TLS; public class ConnectionTrace {
@TLS
private static long startTime = 0; @Export private static long openedCount;
@Export private static long penedCount;
@Export private static long closedCount; @OnMethod(clazz = "/*.jedis.Connection/", method = "makeObject")
public static void startMethod(@Return Object obj){
startTime = timeMillis();
penedCount++;
println("One connection is opened!");
println(obj);
Threads.jstack();
} @OnMethod(clazz = "/*.jedis.Connection/", method = "destroyObject")
public static void endMethod(@Self Object obj){
closedCount++;
println("One connection is closed!");
println(obj);
Threads.jstack();
} @OnExit
public static void f(){
println("Total opened connection:");
println(openedCount);
println("Total closed connection:");
println(closedCount);
}
}

btrace使用的更多相关文章

  1. java性能调优及问题追踪--Btrace的使用

    在生产环境中经常遇到格式各样的问题,如OOM或者莫名其妙的进程死掉.一般情况下是通过修改程序,添加打印日志:然后重新发布程序来完成.然而,这不仅麻烦,而且带来很多不可控的因素.有没有一种方式,在不修改 ...

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

    一.背景        在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数.返回值.全局变量.堆栈信息等.为了获取这些数据信息,我们可以 通过改写代码,增加日志信息的打 ...

  3. BTrace入门教程

    bin版:https://kenai.com/projects/btrace/downloads/directory/releases 源码:https://github.com/btraceio/b ...

  4. 让VisualVM+BTrace进入unsafe mode

    让VisualVM+BTrace进入unsafe mode http://kenai.com/projects/btrace/pages/UserGuide BTrace很强大,但有很多安全限制,比如 ...

  5. 使用jvisualvm.exe 的Btrace插件监控应用程序

    之前提到使用命令行的方式执行btrace监控,其实jdk提供更好的方式监控应用程序. 我们可以使用jvisualvm.exe加插件的方式监控,这样更加方便. 1.在jvisualvm.exe安装btr ...

  6. 使用BTRACE定位系统中慢的问题

    在访问页面请求的时候,如果系统执行效率低,我们怎样才能定位到这些页面请求呢?   java 有一个十分有效的动态跟踪工具-btrace 网址:https://kenai.com/projects/bt ...

  7. Java BTrace实战(1)--BTrace的入门和使用

    前言: 对线上的java服务, 往往采用日志进行问题处理和分析. 倘若日志缺乏相关的信息时, 那又该如何处理? 远程调试会影响服务的正常工作, 修改代码重新部署的方案其实时性和灵活性难以保证(线上服务 ...

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

    BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的. BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息.而不需要不断地修改代码, ...

  9. btrace 实践笔记

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

随机推荐

  1. JS树形菜单

    超全的JS树形菜单源代码共享(有实例图) 树形菜单是很常用的效果,常用在管理软件当中,但是一套树形菜单已经不能满足需求,所以如果能有一套比较全面的树形菜单JS特效代码,将会非常方便,下面懒人萱将超全的 ...

  2. 在firefox浏览器下,scrollTop始终为0的问题

    firefox下,带dtd文档申明: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  3. 1. K线基础知识一

    1. 什么是K线: K线起源于日本米市交易,它的基本用途就是为了寻找"买卖点". 2. K线按照计算周期可分为日K线,周K线,月K线,年K线. 周K线:周一的开盘价,周五的收盘价, ...

  4. 数据结构-浙大 MOOC 笔记一 基本概念

    做一些笔记记录自己的学习过程 第一节课介绍了数据结构的基本概念,首先没有直接给出相关的定义而是通过思考如何在书架上摆放书籍这样一个简单的类比了解到数据的组织方式的重要性,并通过printN函数的循环实 ...

  5. linux git实现代理

    说明  Git 目前支持的三种协议 git://.ssh:// 和 http://,使用git:// 和 http://比较多,ssh://忽略,FQ后可以直接加快同步google和github代码. ...

  6. Unity 编译错误记录

    1. 相关代码: NetworkView.RPC ("ReceiveMessage", RPCMode.All, message); 编译输出: Assets/cs/ClientC ...

  7. 一次erlang 节点CPU严重波动排查

    新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均. 接下来是排查步骤: 1. dstat -tam 大概每10s一个周期,网络流量开始变得很小,随后突然增 ...

  8. nginx访问量统计

    1.根据访问IP统计UV awk '{print $1}'  access.log|sort | uniq -c |wc -l 2.统计访问URL统计PV awk '{print $7}' acces ...

  9. 远程ssh登陆时报错:/bin/bash: Permission denied

    远程普通用户ssh登录时,提示/bin/bash: Permission denied,用户名mas,密码正确. 首先上个图,用户远程登录步骤,转自http://www.tldp.org/LDP/LG ...

  10. Android安全相关文章[不定期更新…]

    http://drops.wooyun.org/papers/2893 Intent scheme URL attack http://drops.wooyun.org/tips/3812 Andro ...