JVM调优(三)——基于Btrace的监控调试

简介

  • Btrace可以动态地向目标应用程序的字节码注入追踪代码
  • 用到的技术: JavaComplierApi、JVMTI、Agent、Instrumentation+ASM

Btrace安装入门

  • 通过github搜索进行下载

  • 新建环境变量BTRACE_HOME

  • 添加Path:%BTRACE_HOME%\bin

两种运行脚本的方式

  • 在JVisualVM中添加Btrace插件,添加classpath
  • 使用命令行btracce <pid> <trace_script>

Btrace使用详解

拦截方法

  • 普通方法

    @OnMethod(clazz="",method="")
  • 构造函数

    @OnMethod(clazz="",method="<init>")
  • 拦截同名函数,用参数区分

拦截时机

  • Kind.ENTRY:入口,默认值
  • Kind.RETURN:返回
  • Kind.THROW:异常
  • Kind.Line:行

拦截this,参数,返回值

  • this:

    @Self
  • 入参:可以用AnyType,也可以用真实类型,同名的用真实的

  • 返回:@Return

    • 简单类型:直接获取
    • 复杂类型:反射,类名+属性名

其他

  • 打印行号:Kind.LINE
  • 打印堆栈:Thread.jstack()
  • 打印环境变量

使用注意事项

  • 默认只能本地运行
  • 生产环境可以使用,但是被修改的字节码不会被还原

最新文章

  1. css3中变形函数(同样是对元素来说的)和元素通过改变自身属性达到动画效果
  2. 学习使用html与css,并尝试写php
  3. [Machine-Learning] matlab 矩阵常见基本操作
  4. tomcat7+jdk1.8一键安装脚本
  5. express-6 请求和响应对象(1)
  6. ASP.NET上传大文件的问题
  7. PHP框架中最喜欢的WindFramework
  8. IOS常用的系统文件目录介绍
  9. CDNJS:使用JavaScript CDN加速网站载入速度
  10. Loadrunner:集合点(Rendezvous)
  11. 基于python yield机制的异步操作同步化编程模型
  12. C#中判断空字符串的3种方法性能分析
  13. C++笔记1: 单例模式。(一个简单的设计模式在C++中复杂出翔。。)
  14. js循环json得到 键和值
  15. 分金币 [CQOI 2011] [BZOJ 3293]
  16. FTP:500 OOPS: failed to open vsftpd log file:/var/log/vsftpd.log
  17. AOP缓存实现
  18. 迭代和JDB调试
  19. JDBC(4)—Preparedstatement
  20. EasyUI学习总结(五)——EasyUI组件使用

热门文章

  1. C++中使用CMake编译管理项目
  2. Python科学计算三维可视化(整理完结)
  3. linux下shell显示git当前分支
  4. Synchronized 详解
  5. TCP协议-流量控制
  6. P3740 [HAOI2014]贴海报
  7. 【Linux】php7.2.8 + xdebug + composer + php代码覆盖率 + jenkins配置 (实操记录,亲测可用)
  8. Mybatis-技术专区-中的条件查询createCriteria example里面的条件
  9. 安装weblogic中间件_test
  10. K8S创建的相关yaml文件