使用btrace来找出执行慢的方法

转载于:https://shaojun.name/2016/07/260

btrace script

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;
 
@BTrace
public class MethodTimeCost {
 
    @TLS private static long starttime;
     
    @OnMethod(clazz="/org\\..*/", method="/.+/",location=@Location(Kind.ENTRY))
    public static void startExecute() {
        starttime = timeMillis();
    }
     
    @OnMethod(clazz="/org\\..*/", method="/.+/",location=@Location(Kind.RETURN))
    public static void endExecute() {
        long timecost = timeMillis() - starttime;
        if(timecost > 50) {
            print(strcat(strcat(name(probeClass()), "."), probeMethod()));
            print("  [");
            print(strcat("Time taken : ", str(timecost)));
            println("]");
        }
    }
}

被测试代码:

package org.shaojun.test;
 
public class MyTest {
 
    public static void main(String[] args) {
         
         
        for(int i = 0;i < 100; i++) {
            Thread t = new Thread() {
                @Override
                public void run() {
                    Slow slow = new Slow();
                    slow.query();
                }
            };
            t.start();
        }
    }
}
 
package org.shaojun.test;
 
public class Slow {
 
    public void query() {
        while(true) {
            slow();
        }
    }
     
    public void slow() {
        slow2();
    }
     
    public void slow2() {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("helloworld");
    }
}

执行以下代码:
/btrace -cp build 2042 /Users/shaojun/Documents/workspace/btrace/src/MethodTimeCost.java
其中,2042是被测试代码的java进程id
/Users/shaojun/Documents/workspace/btrace/src/MethodTimeCost.java是btrace脚本所在位置
-cp build可以沿用

以下是btrace下载地址:
btrace-bin-1.3.7

转载于:https://www.cnblogs.com/zl0372/p/btrace.html

嵌入式AI实战:基于RK3588部署YOLOv11并集成OpenCV实现实时推理(全流程详解) 本文详细介绍了在RK3588芯片上部署YOLOv11目标检测模型的全流程,包括环境搭建、模型转换和实时推理实现。主要内容为:1)通过YOLOv11官方工具将PyTorch模型转为ONNX格式;2)使用RKNN Toolkit2将ONNX模型转换为适配RK3588的RKNN格式;3)在RK3588上结合OpenCV实现实时视频推理功能。教程提供了完整的代码示例和详细步骤说明,帮助开发者快速在边缘设备上部署目标检测模型,实现AI视觉应用的落地。 阅读详情

相关推荐

无需Root!用VirtualXposed+JustTrustMe在安卓高版本上抓包拼多多API数据

本文详细介绍了在安卓高版本设备上无需Root权限即可抓取拼多多API数据的完整方案,通过VirtualXposed与JustTrustMe组合技术,有效绕过SSL Pinning限制。文章涵盖工具准备、环境配置、应用处理及实战分析,特别针对PDD应用的混合通信策略提供了专业解决方案,适合开发者进行竞品分析和数据采集。

weixin_28678151的博客 453

MySQL语句优化

http://m.studyofnet.com/news/494.html

TBN_MSnail 1090

PySpark机器学习生产化陷阱:跨节点依赖问题的7种解决方案

隐式依赖陷阱使用ldd解决方案:在基础镜像中预装和路径冲突终极解法依赖树瘦身技巧用conda-tree可减少40%环境体积PySpark机器学习生产化的核心矛盾在于分布式环境的确定性与灵活性不可兼得。轻量级方案(1-3)牺牲一致性换取灵活性重量级方案(4-6)牺牲灵活性换取确定性混合方案(7)针对特殊场景补充正如某AI平台架构师所言:“环境一致性不是技术问题,而是工程纪律问题选择适合团队当前阶段的方案,建立严格的依赖管理流程,才能让PySpark真正扛起生产环境的大旗。

datacanvas2426的博客 909

神器 BTrace 快速入门

原文地址:http://mp.weixin.qq.com/s?__biz=MzI0NjUxNTY5Nw==&mid=2247483848&idx=1&sn=1d566e87d37849729b15707cb472ea7e&chksm=e9bf5356dec8da40fcb4a8a3937222b8c35e74f8a6550a9422c8643ab86b1f651fbb9f32ae6a&scene=

Mr__fang的专栏 894

SAP采购订单行项目增强实战:用BADI ME_GUI_PO_CUST添加自定义字段(避坑指南)

本文详细解析了如何通过BADI ME_GUI_PO_CUST在SAP采购订单行项目中添加自定义字段,包括技术架构理解、字段扩展步骤、自定义函数组创建及BADI实现。文章特别强调了避开官方文档未提及的陷阱,如字段映射限制和屏幕显示问题,并提供了高级优化技巧和性能建议。

weixin_30402343的博客 594

盘点那些好用的SAP FIORI App(二) -上传凭证Upload Journal Entry

SAP FICO运维问题及解决方案分享

lijinbao171022的博客 1542

visualvm+BTrace 监控方法的执行时间

1.主题: 本文主要讲如何通过Java自带的VisualVM实现监控当前程序中方法的执行时间以及方法中嵌套方法的执行时间,避免自己通过添加时间切片的方式侵入式的监控方法。 2.安装插件:在Jdk的路径bin路径下运行visualvm打开工具,单纯的visualvm无法定位到具体的方法的执行时间,因此需要安装插件BTrace。 安装过程参考 :https://blog.youkuaiyun.com/liuxia...

naonao2014的专栏 1556

OV5640调试大坑,关于binning、RES分辨率与EV曝光

OV5640在使用binning模式时,必须考虑使用场景,分辨率下降叠加动态范围压缩,会使目标对象细节在高光环境下大量丢失,2x2的binning模式,分辨率会远低于感光面积的1/4。

chongyun_的专栏 1824

使用BTRACE定位系统中慢的问题

在访问页面请求的时候,如果系统执行效率低,我们怎样才能定位到这些页面请求呢?   java 有一个十分有效的动态跟踪工具—btrace 网址:https://kenai.com/projects/btrace/downloads   比如希望定位我们的控制器代码哪些方法慢:   1.我们可以编写如下类:   package demo; import com.sun.btrace....

weixin_33978044的博客 118

Yolov8-pose关键点检测:loss优化 | LRM loss困难样本挖掘,提升难样本、遮挡物等检测精度

LRM loss应用到能够大幅提升pose遮挡物性能

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1714

TC3XX - MCAL知识点(三十九):AURIX™ TC3xx 的EDSADC实现旋变解码功能(应用笔记记录)

本文总结了英飞凌应用笔记中关于EDSADC旋变解码系统的关键内容。系统通过调幅解调获取电机位置和速度信号,支持内外载波生成方案,其中内部载波方案更常用(需2个DSADC通道)。重点介绍了滤波器链配置建议(避免FIR1)、系统条件要求(如偶数积分周期)以及群延迟计算方法。特别分析了SDCAP功能对硬件延迟的补偿机制,指出温度等因素可能导致外部电路延迟变化,需通过计数器测量并通过软件调整积分器起始点来消除角度误差。文中还提供了不同硬件延迟情况下的信号处理示例。

梦想技术家 458

用 btrace 给 App 方法计时:定位慢在哪的实操指南

App 在低端机上启动多卡了 300ms,你凭什么知道是哪行代码的锅?日志打出来代码就臃肿了,断点一打断点执行路径就变了,瞬时问题更是一次都抓不稳。btrace 基于 Perfetto 构建,在 Android 和 iOS 上对运行中的方法做高频计时,同时把耗时原因一并记录下来,最后产出可以直接打开分析的 Perfetto trace。 ## 它解决什么问题 排查性能问题,大多数人靠加日志估耗

gitblog_01196的博客 1108

OpenCV实战(1)——OpenCV与图像处理基础

OpenCV 是一个跨平台计算机视觉和机器学习库,实现了图像处理和计算机视觉方面的很多通用算法。本节将介绍 OpenCV 的基础知识,以及如何编译运行 OpenCV 程序,并介绍如何完成最基本的图像处理任务——读取、显示和保存图像。除此之外,鼠标事件和图形绘制也是 OpenCV 计算机视觉项目中常用的基本功能,本节介绍了如何使用这两个重要的 OpenCV 功能。

盼小辉丶的博客 12万+

btrace 的使用

BTrace是一个非常不错的java诊断工具。BTrace 中的B表示bytecode, 表明它是在字节码层面上对代码进行trace ,用来在运行中的java类中注入trace代码, 并对运行中的目标程序进行热交换(hotswap) 。 记载下几个基本常用的使用,时间长了就忘记了哈。 首先你需要去官网下载个安装包:wget https://kenai.com/projects/btrace

changewang的专栏 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BTrace安装和使用

一、 安装JDK(需要安装jdk7及以上版本) jdk-7u80-linux-x64.tar.gz 二、 安装BTrace 1)下载地址:https://github.com/btraceio/btrace/releases/tag/v1.3.8.3-1 2)解压缩 在当前用户目录下新建btrace目录,ftp上传btrace-bin-1.3.8.3.tgz至该目录下,执行tar

xingbear的专栏 5331

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Btrace 使用小结

BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的。 BTrace的最大好处,是可以通过自己编写的脚本,获取应用的一切调用信息。而不需要重启应用! 只要定义脚本时不作大死(比如查看谁调用了HashMap的put方法),直接在生产环境打开也没影响。   1.简介 项目地址:http://github.com/btraceio/btrace ...

吹雪的专栏 3723

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

BTrace简介及使用

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

~~wind~fly~~ 7072

Btrace的使用

本文主要介绍BTrace的使用

Lucky_mn的专栏 989

btrace使用记录

关于作者:优快云内容合伙人、技术专家, 从零开始做日活千万级APP。专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

fumeidonga的博客 1794

BTrace使用总结(安装,配置,运行)

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

飘过的春风 7958

java btrace_Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)

Windows环境下jvisualvm+Btrace 监控Java程序一、背景在项目开发中,想要监控程序,我们可以本地启动项目,然后断点调试,可是对于线上的项目需要监控或者调试的时候,就没什么办法,目前有以下几种监控方式:1、通过日志监控。通过代码中写的日志记录,来跟踪程序的执行,但是无法监控程序执行时间2、通过JConsole跟踪和监控程序:参考3、利用jstack分析线程4、通过Btrace来...

weixin_28863429的博客 273

BTrace简单使用

BTrace:Byte trace,通过动态字节码将跟踪操作代码插入到正在运行的Java程序的类中。 简单来说,就是通过 instrument + asm,对正在运行中的类,进行动态增强。使用过Jrebel 的对此可能非常熟悉,原理类似。 使用场景 基于此,btrace 被用于线上排查问题,追踪bug。最常用的就是跟VisualVM 一起用来排查问题。 概念 探测点 限制 为...

hustzw07的博客 396

BTrace简介与使用说明

大家在开发过程中总会预告各种个样的BUG,不是什么时候都可以去debug,也不是什么时候都可以去在代码中增加需要的日志,这个时候该如何解决呢?这个时候就是BTrace的大展身手的时候时候了,下面通过对于BTrace的介绍,同时会有一些示例代码希望可以给大家带来一定的了解 简介 Btrace (Byte Trace)是sun推出的一款java 动态、安全追踪工具,可以不停.........

技术分享 734
上一篇: MacBook pro new 触控板手势及快捷键
下一篇: Vaadin发布Polyglot框架第8版
weixin_33728708
博客等级 码龄11年 5472粉丝 1452原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值