`

java btrace程序监控方法运行时间 call tree

阅读更多

在项目中,开发阶段监控程序可以使用断点完成调试,对于线上的项目,要监控时候:

1.日志分析,

2.JConsole工具

3.Btrace跟踪和监控线程

 

安装Btrace:在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);

 } 

 

}

 

 

如果想监控程序的参数,运行call tree,换成以下代码即可:

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

}

 

}

 

 

 

分享到:
评论

相关推荐

    docsgen_dot_tools.zip_Dot._and or tree_and-or tree_call tree

    Generate a function or script file call tree and plot it in a figure

    java代码-使用java解决webservice接口call调用方式的源代码

    java代码-使用java解决webservice接口call调用方式的源代码 ——学习参考资料:仅用于个人学习使用!

    java.lang.IllegalStateException: Cannot call sendError() after the response has

    NULL 博文链接:https://hw1287789687.iteye.com/blog/1925191

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    找CALL 例子程序

    找CALL 例子程序 个人编写,纯属研究学习!!

    vb6.0定时运行程序(含程序和源代码)

    可以设定某程序到某一时间运行。但暂时只能添加单一程序。就是指运行时不能设定多个任务。但可以运行多个本程序。ps:后来又添加了一个回车触发添加的函数。但没有必要再上传了。把那个函数代码写在下面,只要放到...

    java调用shell(包含有参数的调用)

    java调用shell 包含简单的编写shell文件 调用含有参数的shell文件

    易语言调用内部call子程序

    易语言调用内部call子程序源码,调用内部call子程序,call_h汇编1个参数eax,call_h汇编1个参数ecx,call_h汇编1个参数edx,call_h汇编1个参数ebx,call_h汇编1个参数ecx_edx,call_h汇编1个参数eax_ecx_edx,call_h汇编2个...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    Btrace 学习1

    NULL 博文链接:https://tristan-s.iteye.com/blog/1960257

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包4

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    C-P-P-call-Java-classes.rar_c call java

    介绍了c++怎么调用java语言类,本资料对c++与java混合编程有很好的帮助。

    java的类别方法(格式:PPT 字体:繁体)

    在Java的程序属於一种类别的成员,称为「方法」(Method),在Java的程序或函数称为方法. Java的方法可以分为两种,如下所示: 属於类别的「类别方法」(Class Methods) 物件的「实例方法」(Instance Methods) Java的类别...

    淡淡简单描述javascript中方法apply和call

    淡淡简单描述javascript中方法apply和call

    Java调用asmx(WebService)

    java通过webservice调用asmx的实例。

    java源码包2

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java_call_c.rar_Java call C

    在JAVA里 调用 C 程序,做JAVA和C的朋友注意了,值得学习

    JavaScript中call与apply方法

    JavaScript中call与apply方法

Global site tag (gtag.js) - Google Analytics