Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)
2017-12-22 12:07
323 查看
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;[url=mailto:br/>@BTrace
@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);
}
}
一、背景
在项目开发中,想要监控程序,我们可以本地启动项目,然后断点调试,可是对于线上的项目需要监控或者调试的时候,就没什么办法,目前有以下几种监控方式:
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;[url=mailto:br/>@BTrace
@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);
}
}
相关文章推荐
- Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)
- Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)
- Java调优—Btrace监控Java线程/方法执行参数、执行时间(Windows)
- java 方法的执行时间监控 设置超时(Future 接口)
- Java线程暂停一段时间之后继续执行的实现方法
- java timer 实现在指定时间执行方法
- java向线程中传递参数的方法
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到
- Java牛角尖【005】:finalize方法什么时间执行?
- net 监控方法执行时间
- java 方法参数的执行顺序
- 使用ASM4.0实现AOP的功能,监控每个方法的执行时间
- 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法
- 用java的反射机制执行某个方法并传递复杂参数
- 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法
- 【转】【Thread】Java向线程传递参数的常用方法【多线程】
- C与Java中计算程序执行时间的方法
- C与Java中计算程序执行时间的方法
- java中结合单例模式,控制单例类的某方法在被多线程调用时,只被1个线程调用执行,执行完毕后才被另一线程调用
- Windows via C/C++:线程的执行时间