btrace简单使用
基本安装
在github上btrace项目的release下 下载最新的btrace
https://github.com/btraceio/btrace/releases
解压完后,将btrace的bin目录添加进环境变量
使用方法 btrace <options> <PID> <btrace脚本>
visualvm安装btrace
首先在visualvm中安装btrace插件
菜单栏>工具>插件>可用插件>btrace
安装完成后,如下操作

一个简单的例子
package me.cayun.javalab;
public class {
private static Tmp output(String s, int x) {
|
目标
- 输出该函数的参数
- 输出该函数的执行时间
- 输出该函数的返回值
btrace脚本
import com.sun.btrace.annotations.*; |
解释
- @BTrace 表明这是一个btrace脚本
- @OnMethod 指定方法入口,其中clazz和method参数可以使用正则表达式
- @Location 表示拦截的时机,
- Kind.ENTRY表示在进入方法时执行,默认为ENTRY
- Kind.RETURN表示方法执行后执行
- @Return 表示返回参数,前提location为Kind.RETURN
- @Duration 表示函数执行时间,单位: 纳秒,前提location为Kind.RETURN
- 获取类的某个属性值, get(field(clazz, name), object);
另一种获取函数运行时间的方法
还是刚刚那段Java代码,新的btrace脚本如下
import com.sun.btrace.annotations.*; |
解释
- @TLS 用来将一个脚本变量与一个ThreadLocal变量关联
btrace直接使用项目中的类
public class {
public static AtomicInteger i = new AtomicInteger();
private static void inc(int x) {
|
在第一个示例中,调用项目中的类使用的是反射的方式,但其实btrace也可以直接使用项目的类
目标
- 获取BtraceMain中的i的值
btrace脚本
import com.sun.btrace.annotations.*; |
emm~,只需要在前面import相应的类即可
如果变量为私有变量,仍然需要通过反射的方式获取
btrace关于map的操作
以下代码摘自btrace源码中com.sun.btrace.BTraceUtils函数
public static void printMap(Map map) {
|
其他常见用法
打印调用栈
package me.cayun.javalab;
public class {
private static void gc1() {
|
btrace脚本
import com.sun.btrace.annotations.*; |
查看VM/内存/CPU等信息
可以参考BTraceUtils的源码
https://github.com/btraceio/btrace/blob/master/src/share/classes/com/sun/btrace/BTraceUtils.java
参考
[1] btrace github
[2] BTrace 简明使用手册
[3] BTrace使用
btrace简单使用的更多相关文章
- Java BTrace实战(1)--BTrace的入门和使用
前言: 对线上的java服务, 往往采用日志进行问题处理和分析. 倘若日志缺乏相关的信息时, 那又该如何处理? 远程调试会影响服务的正常工作, 修改代码重新部署的方案其实时性和灵活性难以保证(线上服务 ...
- Btrace入门到熟练小工完全指南
BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的. BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息.而不需要不断地修改代码, ...
- btrace 实践笔记
btrace简介: btrace 是一个使用在JAVA平台上面的,安全的,动态跟踪工具.它一般用于动态跟踪正在运行的jAVA程序. 使用说明在这里.下载地址在这里. 下载的时候 ...
- btrace拓展工具-java应用性能诊断优化利器
Btrace是一个实时监控工具,可以无需修改应用代码(事实上它修改了字节码),来达到不可告人的秘密!这是性能调优和诊断的利器! 它可以获取应用程序代码的执行时间,他可以让你无需修改代码,帮你做时间的打 ...
- Btrace是一个实时监控工具
http://blog.csdn.net/gzh0222/article/details/9731031 Btrace是一个实时监控工具,可以无需修改应用代码(事实上它修改了字节码),来达到不可告人的 ...
- Btrace
http://www.iteye.com/topic/1005918 背景 周五下班回家,在公司班车上觉得无聊,看了下btrace的源码(自己反编译). 一些关于btrace的基本内容,可以看下我早起 ...
- BTrace : Java 线上问题排查神器
BTrace 是什么 BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执行过程中的一切信息,并且,注意了,不用重启服务,是的,不用重启服务.写好脚本,直接用命 ...
- Btrace官方教程-中文版
教程英文版来源:https://github.com/btraceio/btrace/blob/master/docs/usersguide.html BTrace用户指南 BTrace是一种安全,动 ...
- BTrace使用小结
简介 BTrace是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目. 典型的使用场景是,“我要查个问题,可那个方法没有打印入口参数和返回结果日志”,“我想看某个方法的执 ...
随机推荐
- 题解 洛谷P2158 【[SDOI2008]仪仗队】
本文搬自本人洛谷博客 题目 本文进行了一定的更新 优化了 Markdown 中 Latex 语句的运用,加强了可读性 补充了"我们仍不曾知晓得 消失的 性质5 ",加强了推导的严谨 ...
- Object中有哪些公共方法及作用
大家在学习java的时候,一定遇到过Object类,因为在java单一继承体系中Object类是根类,所有的类都会继承它,并拥有Object的公共方法,意味着在java的面向对象的世界中,所有对象都拥 ...
- nginx中rewrite flag
rewrite 正则表达式 新URI [flag]; [flag] 选项用于调控重写的行为,它的取值可能是: last:重写完成后,会停止继续处理当前区块所有属于ngx_http_rewrite ...
- win10 python 3.7 pip install tensorflow
环境: ide:pyCharm 2018.3.2 pyhton3.7 os:win10 64bit 步骤: 1.确认你的python有没有装pip,有则直接跳2.无则cmd到python安装目录下ea ...
- python机器学习(1:K_means聚类算法)
一.算法介绍 K-means算法是最简单的也是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的.算法的目的是使各个样本与所在均值的误差平方和达到最小(这也是评价K-means算 ...
- 关于SG函数
Sprague-Grundy定理(SG定理): 游戏和的SG函数等于各个游戏SG函数的Nim和.这样就可以将每一个子游戏分而治之,从而简化了问题.而Bouton定理就是Sprague-Grundy定理 ...
- jest 测试入门(一)
说实话,作为前端来说,单元测试,并不是一种必须的技能,但是确实一种可以让你加法的技能 之前我一个库添加了单元测试,加完之后感悟颇深,所以写下这篇文章来记录 环境搭建 一般来说,普通的库,如果没有添加 ...
- Java任务调度框架之分布式调度框架XXL-Job介绍
Java任务调度框架之分布式调度框架XXL-Job介绍及快速入门 调度器使用场景: Java开发中经常会使用到定时任务:比如每月1号凌晨生成上个月的账单.比如每天凌晨1点对上一天的数据进行对账操作 ...
- eclipse利用sql语句对Oracle数据库进行操作
对Oracle数据库执行操作的sql语句中表名和列名都需用英文双引号("")括起来. 注(\为转义符) 1.插入数据 sql = "insert into \" ...
- Pipe Fitter and the Fierce Dogs
Pipe Fitter and the Fierce Dogs [JAG Asia 2016] 理解题意之后,就是一个非常傻的DP 然后难在理解题意,理解非法状态 #include <bits/ ...