开发工具系列(一):Btrace——线上Debug工具
来源:互联网 发布:2016网络春晚 编辑:程序博客网 时间:2024/04/30 06:19
Btrace
Btrace用于调试正在运行的系统,并且在调试时不会暂停系统。特别适用于跟踪线上问题。你可以实时监控一个系统中任何一个方法的调用,你可以知道这些方法的参数、返回值是什么,还可以知道方法调用消耗了多少时间。
Btrace不需要安装,只要下载一个包,解压即可。
Btrace用法为bin/btrace <pid> <trace-script>
。其中pid
是正在运行的java进程,trace-script
是跟踪脚本,它其实就是一段java代码。
Hello World
首先我们模拟一个正在运行的程序,它仅有一个循环。
}
然后开启这个程序: java com.caipeichao.NullApp
通过jps命令得到这个程序的PID,这里为13348。
> jps3034 RemoteMavenServer2902 Main15147 Jps13348 NullApp
准备工作做完了,现在编写最重要的跟踪脚本。
@BTrace}
运行btrace,得到如下输出。
> btrace 13348 HelloBtrace.javaHello worldHello worldHello worldHello worldHello worldHello world
常用注解
@BTrace
类声明跟踪脚本@OnMethod(clazz,method,location)
方法当指定方法被调用时@OnMethod(method="<init>")
方法当构造函数被调用时@OnMethod(clazz="/java\\.io\\..*Input/"))
方法方法名称正则匹配@Location(kind)
@OnMethod
指定监控方法调用前还是调用后@Location(value=Kind.NEWARRAY, clazz="char")
@OnMethod
监控新增数组@Self
参数表示被监控的对象@ProbeMethodName
参数被监控的方法名称@ProbeClassName
参数被监控的类名@OnTimer(interval)
方法定时调用某个方法@OnLowMemory(pool,threshold)
方法当内存不足时@OnExit
方法当程序退出时@OnProbe(namespace="java.net.socket",name="bind")
方法监控socket中的bind方法常用方法
println
在本地控制台输出一行print
在本地控制台输出printArray
在本地控制台输出数组jstack
打印远程方法的调用调用栈jstackAll
输出所有线程的调用栈exit
退出跟踪脚本Strings.strcat
连接字符串Reflactive.name
获取类名Threads.name
线程名Threads.currentThread
当前线程deadlocks
打出死锁线程sizeof
获取对象的大小,比如List
对象就返回List.size()
Sys.Env.property
获取系统变量原理
BTrace利用了java.lang.instrument
包实现代码注入。首先通过VirtualMachine.attach(pid)
连接远程JVM,然后通过VirtualMachine.loadAgent("*.jar")
加载一个btrace的jar包。这个jar包最重要的代码如下。
public static void {;}public static void {;}// 将btrace的jar包添加到ClassLoader搜索目录private static synchronized void {...inst.;...inst.;...;}// 开启服务private static void {...while (true) {try {...;} catch (RuntimeException re) {if () ;} catch (IOException ioexp) {if () ;}}}// 修改内存中的类定义private static void {...inst.;...inst.;}// 用ASM动态生成字节码}
一句话总结,btrace利用instrument工具修改JVM内存中的类字节码,达到注入代码的目的。
0 1
- 开发工具系列(一):Btrace——线上Debug工具
- 开发工具系列(一):Btrace——线上Debug工具
- 线上排查工具btrace和jvm-inspector使用说明
- 线上性能问题排查工具btrace使用例子
- BTace系列之一:BTrace工具简介
- 工具系列(一)
- Android开发工具——ADB(Android Debug Bridge) <一>概览
- (转)Android开发工具——ADB(Android Debug Bridge) <一>概览
- Android开发工具——ADB(Android Debug Bridge) <一>概览
- 线上问题排查(2)——JDK内置工具
- Java动态跟踪工具(不需要重启服务)——Btrace
- BTRACE-实时监控工具
- BTrace 工具使用
- BTrace监控工具
- BTrace工具简介
- BTrace工具简介
- web 开发 debug 工具
- Android开发工具——ADB(Android Debug Bridge)
- 率失真最优化解释
- EM算法与在高斯混合模型中的应用
- [ASP.NET MVC 小牛之路]17 - 捆绑(Bundle)
- 博百优比赛潮流:去掉nofollow是好是坏
- ios多线程
- 开发工具系列(一):Btrace——线上Debug工具
- UI_协议
- 项目5
- SIFT特征提取-应用篇
- [ASP.NET MVC 小牛之路]18 - Web API
- 微软面试题:飞机加油问题(智商被压制的节奏,好精妙)
- 从头认识C—变量的取地址操作
- 多项式相乘(链表实现)
- Matlab 线性拟合 & 非线性拟合