博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)
阅读量:5810 次
发布时间:2019-06-18

本文共 2846 字,大约阅读时间需要 9 分钟。

  hot3.png

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窗体内:

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

 

 

 

四、补充

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

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
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);} }

 

转载于:https://my.oschina.net/cccyb/blog/1577682

你可能感兴趣的文章
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
vSphere 6将于2月2日全球同步发表
查看>>
Android状态栏实现沉浸式模式
查看>>
让你的APP实现即时聊天功能
查看>>
iOS 绝对路径和相对路径
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
应用新安全组 - 每天5分钟玩转 OpenStack(116)
查看>>
iOS - UIViewController
查看>>
IntPtr 转 string
查看>>
学生名单
查看>>