前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)

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

作者头像
执笔记忆的空白
发布2020-12-25 14:42:44
1.2K0
发布2020-12-25 14:42:44
举报
文章被收录于专栏:Java日常Java日常

Windows环境下jvisualvm+Btrace 监控Java程序

一、背景

在项目开发中,想要监控程序,我们可以本地启动项目,然后断点调试,可是对于线上的项目需要监控或者调试的时候,就没什么办法,目前有以下几种监控方式:

1、通过日志监控。通过代码中写的日志记录,来跟踪程序的执行,但是无法监控程序执行时间

2、通过JConsole跟踪和监控程序:参考

3、利用jstack分析线程

4、通过Btrace来跟踪和监控程序

今天我们要说的,就是第三种,利用Btrace来监控Java程序的运行

二、安装与执行(Windows)

在windows环境下,可以直接利用jdk自带的jvisualvm工具来 安装Btrace插件,具体操作如下:

1、进入jdk安装目录,进入bin目录,找到jvisualvm.exe ,打开之后,在工具栏——>工具——>插件 ,搜索插件BTrace Workbench,然后安装

2、启动你程序所在的Tomcat,在jvisualvm.exe 窗口你会发现有个Tomcat的菜单图标,右键——>选择Trace application,具体如下图:

3、如果想监控程序执行时间,复制如下代码到Btrace窗体内:

代码语言:javascript
复制
package my.app.btrace;
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;
@BTrace 
public class TraceProductManageImpl { 

@OnMethod(clazz = "/com.odianyun.+business.+/", method = "/.+/", location = @Location(Kind.RETURN)) 
public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,@Duration long time){ 
long durationTime = time/1000000;
if(durationTime > 0){
String output = strcat(name,".");
output = strcat(output,method);
output = strcat(output,"#");
output = strcat(output,str(probeLine()));
output = strcat(output,">>");
output = strcat(output,str(durationTime));
output = strcat(output,">>ThreadId:");
output = strcat(output,str(threadId(currentThread())));
println(output);
}
} 
}

具体操作如下图:

然后你就能监控你程序方法的执行时间(这里监控的是你填写package目录下的每个class下面 的方法)

三、Linux下安装Btrace

1、目前最新版下载地址是: 点击打开链接

2、选择不同版本下载

3、Linux安装,需要设置BTRACE_HOME环境变量和在PATH中添加bin目录,并添加bin目录下文件的可执行权限。

4、把上述代码,写到一个文件,例如:DEMO.java 是用java写的脚本,上传到服务器上即可执行。 btrace 4552 DEMO.java >> /data/btrace/DEMO.txt

四、补充

如果想监控程序的参数什么的,换成以下代码即可:

代码语言:javascript
复制
ackage my.app.btrace;
import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.size;
import static com.sun.btrace.BTraceUtils.str;
import static com.sun.btrace.BTraceUtils.strcat;
import java.util.List;
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.ProbeClassName;
import com.sun.btrace.annotations.ProbeMethodName;
import com.sun.btrace.annotations.Return;
import com.sun.btrace.annotations.Self;
@BTrace
/**
* 获取程序参数
* @author Michael
*/
public class TraceProductManageParam { 

@OnMethod(clazz = "com.odianyun.frontier.guide.business.read.manage.impl.PromotionManageImpl", method = "getMerchantProductCurrentPromotionPriceBatch", location = @Location(Kind.RETURN)) 
public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,@Self Object self, List<Long> mpIds, Long companyId, @Return List<?> ret){ 
String output = strcat(name,".");
output = strcat(output,method);
output = strcat(output,">inputItems:");
output = strcat(output, str(mpIds));
output = strcat(output,">outputSize:");
output = strcat(output, str(size(ret)));
println(output);
} 
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Windows环境下jvisualvm+Btrace 监控Java程序
  • 一、背景
  • 二、安装与执行(Windows)
  • 三、Linux下安装Btrace
  • 四、补充
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档