前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用BTrace性能跟踪

使用BTrace性能跟踪

作者头像
物流IT圈
发布2019-07-16 11:32:44
5710
发布2019-07-16 11:32:44
举报
文章被收录于专栏:物流IT圈

BTrace是一个开源项目,开始于2007年,名声鹊起得益于2008年的JavaOne会议。

  BTrace有助于我们解决针对复杂的代码追查问题,包括代码错误的,不可预测的流量,并发性问题和性能问题,通常都是很难重现的情况下发生的。

  BTrace动态(无需重新启动应用程序)改变应用程序的字节码。测量的目标可以在一个特定的代码区域。如果超出此范围使用,可能会损害应用程序的流量,因此是禁止通过验证。

  例如,让我们尝试解决以下问题 - 每天一次偶尔的重要文件被删除。我们希望找到是哪行代码干这个坏事。因此,我们想修改'删除'方法的java.io.File代码,加入打印调用线程的堆栈跟踪。 BTrace可以帮助我们做到这一点,通过写一个短和直接的Java代码:

import com.sun.btrace.annotations.*; import com.sun.btrace.BTraceUtils;

@BTrace public class HelloWorld {

@OnMethod(clazz="java.io.File",method="") public static void onNewFileCreated(String fileName) { BTraceUtils.println("New file is being created"); BTraceUtils.println(fileName); }

Btrace代码非常有AOP面向方面编程特点。每个BTrace脚本由探头Probes (切入点方面pointcuts)和Actions操作(advice)组成。探针Probe可以在以下地方:

  • Method entry/exit
  • Line number
  • Field updated/accessed
  • Method call/return (within specified method(s))
  • Exception throw (before)
  • Synchronization entry/exit
  • Timer
  • Constructor entry

Btrace原理如下:

在目标JVM是一个动态插入BTrace的代理。 BTrace客户端(无论是BTrace命令行或Visual VM的 BTrace插件)将命令发送到代理,并得到响应。 BTrace代理测量类被加载到目标JVM并重新加载已加载的类。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 驼马精英 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档