博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Btrace
阅读量:5973 次
发布时间:2019-06-19

本文共 1610 字,大约阅读时间需要 5 分钟。

  hot3.png

转载自

相关博客

  1. btrace扩展
  2. userGuide:
  3. JAVA doc:
  4. BTrace用户手册<译>,
  5. btrace使用简介,
  6. btrace记忆,
  7. btrace一些你不知道的事(源码入手),
  8. 系列文章
  9. 江南白衣

1背景

在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数、返回值、全局变量、堆栈信息等。为了获取这些数据信息,我们可以通过改写代码,增加日志信息的打印,再发布到生产环境。通过这种方式,一方面将增大定位问题的成本和周期,对于紧急问题无法做到及时响应;另一方面重新部署后环境可能已被破坏,很难重新问题的场景。

2 BTrace功能

BTrace天生就为解决这类问题而来,它可以动态地跟踪java运行程序。通过hotswap技术,动态将跟踪字节码注入到运行类中,对运行代码侵入较小,对性能上的影响可以忽略不计。

BTrace在使用上有很多限制条件,如不能创建对象、数组、抛出和捕获异常、循环等,具体限制条件参考用户文档中的BTrace Restrictions。用户文档地址: 。
根据官方声明,不当地使用btrace可能导致jvm崩溃,如BTrace使用错误的.class文件,Hotspot JVM自身存在的hotswap bug等。可以先在本地验证BTrace脚本的正确性,再传到生产环境中定位问题。

3 安装步骤

  1. 下载安装压缩包,最新版本的是1.2.1,下载地址: 。
  2. 解压缩,命令脚本放在bin目录中。
  3. 设置脚本环境变量。
  4. 增加脚本可执行权限。

4 使用方法

BTrace主要包含btracec和btrace两个命令编译和启动BTrace脚本:

1. btrace

  1. 功能: 用于运行BTrace跟踪程序。
  2. 命令格式:
    btrace [-I
  3. 示例:
    btrace -cp build/ 1200 AllCalls1.java
  4. 参数含义:
  • include-path指定头文件的路径,用于脚本预处理功能,可选;
  • port指定BTrace - - agent的服务端监听端口号,用来监听clients,默认为2020,可选;
  • classpath用来指定类加载路径,默认为当前路径,可选;
  • pid表示进程号,可通过jps命令获取;
  • btrace-script即为BTrace脚本;btrace脚本如果以.java结尾,会先编译再提交执行。可使用btracec命令对脚本进行预编译。
  • args是BTrace脚本可选参数,在脚本中可通过"$"和"$length"获取参数信息。
  1. 命令行使用有顺序要求
    cd /d D:\developTool\btrace-bin\bin
    btrace -cp D:\developTool\btrace-bin\build 2948 C:\Users\siang\Desktop\TracingScript.java

2 btracec

功能: 用于预编译BTrace脚本,用于在编译时期验证脚本正确性。

btracec [-I

3 btracer

  1. 功能: btracer命令同时启动应用程序和BTrace脚本,即在应用程序启动过程中使用BTrace脚本。而btrace命令针对已运行程序执行BTrace脚本。
  2. 命令格式:
    btracer <pre-compiled-btrace.class>
  3. 参数说明:
  • pre-compiled-btrace.class表示经过btracec编译后的BTrace脚本。
  • application-main-class表示应用程序代码;
  • application-args表示应用程序参数。
  1. 该命令的等价写法为:
    java -javaagent:btrace-agent.jar=script=

4 jvisualvm插件

07142701_uLz3.jpg

转载于:https://my.oschina.net/sbcagf/blog/782867

你可能感兴趣的文章
Android 应用开发实例之情景模式
查看>>
ios中图层和view的关系
查看>>
Linux 查看文件内容的命令
查看>>
python开发_difflib字符串比较
查看>>
被解放的姜戈01 初试天涯
查看>>
mongodb基本数据类型
查看>>
三极管工作区在Spectre中的表示
查看>>
HT for Web的HTML5树组件延迟加载技术实现
查看>>
ASP.NET MVC 3 Razor Nested foreach with if statements
查看>>
【Mysql】命令行
查看>>
Asterisk 安装与配置
查看>>
SQL2008-中不想插入从复记录
查看>>
.Net基础
查看>>
AES加密算法原理
查看>>
《Programming WPF》翻译 第8章 4.关键帧动画
查看>>
iOS UI基础-16.0 UIButton
查看>>
屏蔽各大视频网站播放前15秒30秒广告
查看>>
进入TP-Link路由器之后利用快捷键F12查看星号路由密码的方法
查看>>
linux内核的oops
查看>>
iOS - OC 语言新特性
查看>>