(1)你是否有时发现线上的代码运行效率不高,但却无法定位到底具体是哪一段代码?
(2)你是否有时在测试环境中苦苦测试,最后却发现测试环境和生产环境差距太大而导致测试结果不可信?
恭喜你,本文恰好符合你的需求。
1什么是BTrace
BTrace是sun推出的一款java性能监控工具,利用java agent 和 jvm attach技术来实现运行时java程序的跟踪和替换,可以不停机的情况下监控线上情况,并且做到最少的侵入,占用最少的系统资源。BTrace的脚本是用纯java编写的,基于一套官方提供的annotation,使跟踪逻辑实现起来异常简单。详细信息可以参考:http://kenai.com/projects/btrace
2如何使用BTrace
(1)下载btrace包 http://kenai.com/projects/btrace/downloads/directory/releases。 目前最新的版本是1.2
(2).设置环境变量。
(3).定制自己需要的脚本,一般是自己写一个Java文件。
(4).jps命令查出需要监控的jvm pid。
(5).调用命令btrace <pid> <自己定制的脚本> <输出文件> eg:btrace 3045 PrintExecuteTime.java > time.log
3 使用示例
本次我们是因为morgan中DefaultMemberService的updateActivedBaseSite方法效率非常低,在测试环境下,发现各个机器上差距很大,不能完全定位性能。从测试机器上的测试结果来看,初步怀疑有两个点的性能可能存在问题:
(1)进行数据库的update的操作
(2)Napoli发送消息
按照如下示例代码(监控时间):
import static com.sun.btrace.BTraceUtils.name;
import static com.sun.btrace.BTraceUtils.print;
import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.probeClass;
import static com.sun.btrace.BTraceUtils.probeMethod;
import static com.sun.btrace.BTraceUtils.str;
import static com.sun.btrace.BTraceUtils.strcat;
import static com.sun.btrace.BTraceUtils.timeMillis;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.TLS;
/**
* 监控方法耗时
*
* @author jerry
*/
@BTrace
public class PrintTimes {
/**
* 开始时间
*/
@TLS
private static long startTime = 0;
/**
* 方法开始时调用
*/
@OnMethod(clazz = "/com\\.jerry\\../", method = "/.+/")
public static void startMethod() {
startTime = timeMillis();
}
/**
* 方法结束时调用<br>
* Kind.RETURN这个注解很重要
*/
@SuppressWarnings("deprecation")
@OnMethod(clazz = "/com\\.jerry\\../", method = "/.+/", location = @Location(Kind.RETURN))
public static void endMethod() {
print(strcat(strcat(name(probeClass()), "."), probeMethod()));
print(" [");
print(strcat("Time taken : ", str(timeMillis() - startTime)));
println("]");
}
}
书写了附件中的测试代码MorganTraceTest.java,并在线上找了一台机器试验:btrace <pid> MorganTraceTest.java > time.log
截取其中一部分结果如附件中time.log,可以看到真正的数据库update方法占用时间相对是较少的,反而DefaultEventService.publishEvent(发napoli消息)占用时间较多,问题基本定位。
4使用时注意
(1)BTrace的功能远不止监控运行时间,还可以监控Annotation,内存等各种资源,大家可以更深入的研究。
(2)鉴于此监控对线上环境还是有些许影响的(虽然非常小),所以我们在监控时时分几次每次半小时,而没有长期一直开启。建议大家时候时还是小心比较好,并且把这作为排查的最后一个手段,而不是第一手段,毕竟线上环境直接影响到用户,进行保持线上环境问题,是每位工程师的责任。
以上信息,参考页面:http://www.iteye.com/topic/652653
其他详细参考资料请见:
BTrace 用户指南 http://kenai.com/projects/btrace/pages/UserGuide
BTrace 开发者指南 http://kenai.com/projects/btrace/pages/DeveloperGuide
分享到:
相关推荐
这个压缩包文件“PaddleDetection-develop”包含了使用PaddleDetection实现rt-detr模型的相关代码和配置,rt-detr是一种实时的、轻量级的目标检测方法,特别适合于资源有限的设备。 PaddleDetection框架提供了多种...
活体检测H5简介 人脸识别 微信官方Demo 微信公众平台(视频接口)开发编程文档
基于tensorflow搭建Faster R-CNN实现目标检测任务 有代码 有数据 可直接运行。 Faster R-CNN 实现目标检测 tensorflow 基于tensorflow搭建Faster R-CNN实现目标检测任务 有代码 有数据 可直接运行。 Faster R-CNN ...
1. **实时监控**:Btrace 可以实时收集应用程序的关键性能指标,如方法调用时间、内存使用情况等。 2. **无侵入性**:Btrace 监控脚本不会改变原始代码,因此不会引入额外的运行时开销或导致潜在的不稳定性。 3. **...
1. **动态性**:BTrace可以在运行时动态地插入代码到正在运行的Java应用中,无需停止或重新启动服务,极大地提高了调试效率。 2. **安全性**:BTrace遵循安全模型,只允许执行预定义的安全脚本,防止对系统造成破坏...
缺陷检测-基于深度学习的道路裂缝缺陷检测代码和使用文档-优质项目实战算法选择 由于本项目是为了更加深入的熟悉语义分割,所以使用传统的unet网络进行训练,不做其他模型之间的对比。 推理加速方案 在推理方面,...
MQ-2气体传感器: 应用:适用于家庭或工厂的...3、代码使用KEIL 开发,当前在STM32F103C8T6运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 4、技术服务:349014857@qq.com
信息系统应用安全代码检测标准
通过使用BTrace,开发者可以在运行时对Java应用添加探查点,收集数据,而无需修改源代码或重新编译。这极大地提高了问题排查的效率和便捷性。 2. **安装过程** - **Linux安装**:首先,将下载的压缩包解压到任意...
BTrace是一款强大的Java应用程序动态跟踪工具,它允许开发者在不修改源代码或重新启动应用的情况下,对正在运行的Java应用程序进行实时的性能分析和诊断。这款工具的核心在于其字节码注入技术,它能够动态地在类的...
该代码实现rt-detr的部署,使用python,调用tensorRT转换后的模型,实现单张图片或者图片文件夹批量推理,代码输入图片/文件夹路径,模型路径,输出图片保存路径,运行命令python ./infer_tensorrt.py --infer_dir=....
deepfake视频检测-基于卷积Vision-Transformer实现的deepfake视频检测源码+模型+运行说明,该项目是个人毕设项目,答辩评审分达到98分代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该...
此资源为红外图像盲元检测与修复的示例python代码,或者说是红外图像坏点检测与修复,另外还有那一份灰度均衡的代码,方便可视化坏点修复前后的效果。本算法通过统计图像像素直方图的方法,按照某个设定的比例,把一...
阿里巴巴的p3c-pmd-2.1.1.jar是一款专为Java开发者设计的代码质量检测工具,旨在提升代码质量并遵循阿里巴巴内部的编码规范。该插件是基于开源项目PMD进行定制和优化,旨在帮助开发团队在早期阶段发现并修复潜在的...
3. **Java编程实现**:使用Java语言编写程序来实现状态检测与自动重启功能。 ### 二、详细知识点解析 #### 1. Tomcat运行状态检测 - **原理**:通过发送HTTP请求到Tomcat服务器上的某个路径(如`/manager/status`...
matlab中拟合中心线的代码车道检测 在此项目中,MATLAB被用作图像处理工具来检测道路上的车道。 以下技术用于车道检测。 •色彩遮罩•Canny边缘检测•感兴趣区域选择•Hough变换线检测 预处理图像 第一步是导入视频...
这个压缩包文件“STM32使用MQ-2代码及资料.zip”包含了使用STM32微控制器配合MQ-2传感器进行气体检测的相关教程和代码资源。 首先,关于STM32的基础知识,它拥有强大的处理能力、丰富的外设接口和低功耗特性。在本...
本文将深入探讨如何在Source Insight这款流行的源代码编辑器中集成并使用PC-lint进行静态代码检测。 首先,我们要了解PC-lint的基本功能。PC-lint能够检查源代码中的语法错误、风格问题、潜在的运行时错误、未初始...
基于机器学习的android恶意代码检测,n-gram opcode + RandomForest.zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用...
根据opencv里面人体检测的HOG代码改写,加上了完整的注释(opencv里面是没有任何注释的),并且增加了样本的训练(代码中只提供了PCA50-HOG的检测算子,如有其它需要可以自行训练),线性检测时使用线性SVM优化,...