BTrace~精确的profile

本文介绍了一款名为BTrace的性能监控工具,该工具具备无需重启进程即可进行监控的优势,并且对现有程序性能干扰较小。文章通过具体示例展示了如何使用BTrace监控Java程序中的特定方法或代码段执行情况。
部署运行你感兴趣的模型镜像

偶然间从一个blog上看到这个项目,于是就花时间看了看,真的值得一试.

 

优点比较明显,总结了几个自己适用的:

 

1.直接使用,无需重启需要监听的进程。

    下载btrace,解压,写监控类, 然后获取需要监控程序的pid进程号,运行bin/btrace <pid> HelloWorld.java ,就这么简单一气呵成。     即时启用,即时关闭。

e.g(每次进程start()都会打印一条消息)

 

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

// @BTrace annotation tells that this is a BTrace program 
@BTrace
class HelloWorld {
   @OnMethod(
        clazz="java.lang.Thread",
        method="start"
)
void func() {
     sharedMethod("msg start Thread");
}

void sharedMethod(String msg) {
     println(msg);
}}

 

 

2.对现有程序的性能干扰不大!!

首先是基于字节码的技术,这个很多框架,包括自己都能够实现。但是,Btrace的精髓还在于,使用c++的模式实现了一些更高效的Util方法,比如: 计时的timeMillis, 字符串函数 strcat,

 

println(strcat("VerifyInterceptor Timetaken(msec) ", str(timeMillis() - startTime)))

 

 

另外,在btrace的监控代码里面,严格限制了任何干扰监控对象程序的java代码。比如创建新对象、抛异常,捕获异常,甚至是使用System.currentTimeMillis()这样的java计时函数都是不可以的。

 

3.切面灵活

厌倦了检测整个函数的执行时间么?(必须的,因为函数会有嵌套调用关系,有时候只期望能检测函数的某一段代码执行时间)

 

那么下面这个例子就比较爽了: 检测VerifyInterceptor.intercept()函数开始,到代码的262行(也就是intercept函数中的某一处),执行时间。

 

// import BTrace annotations
import com.sun.btrace.annotations.*;
// import logging methods
import static com.sun.btrace.BTraceUtils.*;

@BTrace public class Tracker {
@TLS private static long startTime;
@OnMethod(
clazz="com.xxr.VerifyInterceptor",
method="intercept"
)
public static void onbefore() {
startTime = timeMillis();
}
@OnMethod(
clazz="com.xxr.VerifyInterceptor",
method="intercept",
//location=@Location(Kind.RETURN) 
location=@Location(value=Kind.LINE, line=262)
)
public static void onreturn() {
println(strcat("VerifyInterceptor Timetaken(msec) ", str(timeMillis() - startTime)));
//println("==========================");
}
}

 

 

btrace还可以做很多事情,比如监控Annotation,做定时器的检测,输出jstack,jmap.mem,乃至socket,以及将自己暴露成一个JMX bean,远程管理。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

根据原作 https://pan.quark.cn/s/0ed355622f0f 的源码改编 野火IM解决方案 野火IM是专业级即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。 主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便与第三方系统对接或者嵌入现有系统中。 详细情况请参考在线文档。 主要包括一下项目: 野火IM Vue Electron Demo,演示如何将野火IM的能力集成到Vue Electron项目。 前置说明 本项目所使用的是需要付费的,价格请参考费用详情 支持试用,具体请看试用说明 本项目默认只能连接到官方服务,购买或申请试用之后,替换,即可连到自行部署的服务 分支说明 :基于开发,是未来的开发重心 :基于开发,进入维护模式,不再开发新功能,鉴于已经终止支持且不再维护,建议客户升级到版本 环境依赖 mac系统 最新版本的Xcode nodejs v18.19.0 npm v10.2.3 python 2.7.x git npm install -g node-gyp@8.3.0 windows系统 nodejs v18.19.0 python 2.7.x git npm 6.14.15 npm install --global --vs2019 --production windows-build-tools 本步安装windows开发环境的安装内容较多,如果网络情况不好可能需要等较长时间,选择早上网络较好时安装是个好的选择 或参考手动安装 windows-build-tools进行安装 npm install -g node-gyp@8.3.0 linux系统 nodej...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值