`

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

}

 

}

 

 

 

分享到:
评论

相关推荐

    Java线程超时监控

    总之,Java提供了多种方法来监控和管理线程的超时,包括使用`Future`、`ExecutorService`和`Thread.join`。正确地使用这些工具可以提高程序的健壮性,防止因长时间运行任务而导致的性能问题。在实际开发中,应根据...

    Btrace 学习1

    【描述】:Btrace 是一款强大的Java应用程序运行时分析工具,它允许开发者在不重启应用的情况下,实时地对正在运行的Java程序进行诊断和性能监控。通过深入剖析JVM(Java虚拟机)的工作机制,Btrace 提供了一种安全...

    voicecall-java-demo(x-wsse).rar

    【标题】"voicecall-java-demo(x-wsse).rar"是一个基于Java实现的华为云语音通话示例项目,其中包含了使用WS-Security(X-WSS4J)安全协议的代码示例。这个压缩包是为了帮助开发者理解和集成华为云的语音服务。 ...

    java数据库应用程序编程指南

    在Java编程领域,数据库应用程序开发是一项至关重要的技能。本指南将深入探讨如何使用Java与数据库进行交互,特别是针对Oracle数据库的编程。以下是基于标题、描述和标签所涉及的知识点的详细说明: 1. **Java...

    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程序模型检查方法与实现框架.pdf

    "Java程序模型检查方法与实现框架" 本文讨论了Java程序模型检查方法与实现框架,介绍了基于流分析的模型检查技术和实现框架。模型检查是软件可靠性研究领域的一个研究热点,可以补充测试技术之不足。本文首先介绍了...

    Java多线程程序设计

    Java多线程程序设计是Java开发中的重要领域,它允许应用程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。在Java中,多线程主要通过两种方式实现:继承Thread类和实现Runnable接口。 一、创建线程...

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

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

    START和CALL命令在调用外部程序时的区别

    ### START和CALL命令在调用外部程序时的区别 #### 前言 在批处理脚本编程中,经常需要调用外部程序或者另一个批处理文件。`START` 和 `CALL` 是两种常用的命令,用于实现这一功能。本文将通过具体的示例深入探讨这...

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

    5. **在Java中加载和调用**:在Java程序中,使用`System.loadLibrary()`加载之前编译好的库文件,然后就可以像调用普通Java方法一样调用C++实现的native方法。 在实际应用中,我们需要注意几个关键点: - **数据...

    Java程序调用存储过程

    Java程序调用存储过程是数据库操作中的常见任务,特别是在处理大量数据或需要高效执行复杂业务逻辑时。存储过程是预编译的SQL语句集合,它们可以提高性能、减少网络流量,并提供更好的安全性。在Java应用程序中调用...

    Java调用应用程序和Dos中的命令

    在Java中,`java.lang.Runtime`类提供了与当前运行时系统交互的方法,其中包括`exec()`方法,该方法允许我们启动一个新的进程并控制其输入和输出流。这对于需要与操作系统交互的任务非常有用。 #### 二、Runtime类...

    java面试题

    9. **Java程序运行** - 选项:(A) 能被java.exe成功运行的Java class文件必须有main()方法 (B) J2SDK就是Java API (C) Appletviewer.exe可利用jar选项运行.jar文件 (D) 能被Appletviewer成功运行的Java class文件...

    Java通过进程名称杀进程

    - JRE是Java应用程序运行时环境的基础部分,包含了Java虚拟机(JVM)、类库以及运行Java程序所需的其他支持组件。 - `Runtime.getRuntime()`方法可以获得当前Java应用程序的`Runtime`实例,从而执行操作系统级别的...

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

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

    powerbuilder_call_java

    "powerbuilder_call_java"的主题聚焦于如何在PowerBuilder应用中调用Java代码,实现两种技术的混合编程,以利用各自的优势。这种集成方式可以提升应用程序的功能性和可扩展性。 PowerBuilder调用Java主要依赖于Java...

    jvm-callgraph,jvm字节码的调用图生成器.zip

    《深入解析JVM字节码调用图生成器——基于jvm-callgraph开源项目》 在Java虚拟机(JVM)的世界里,理解和优化代码...通过深入学习和使用这款工具,我们可以更好地驾驭Java程序的运行时行为,提升开发效率和软件质量。

    java方法调用

    如果没有定义`main`方法,那么Java程序将无法独立运行。 #### 三、方法调用的方式 方法调用有两种主要方式:在一个类内部的方法调用与不同类之间的方法调用。目前我们先聚焦于一个类内部的方法调用。 ##### 1. 类...

    java_call_c.rar_Java call C

    - 运行Java程序,调用`callCMethod`,实现Java和C的交互。 4. **注意事项**: - JNI调用可能会有性能开销,因为需要在Java和本地代码之间进行上下文切换。 - 本地方法的错误处理要特别小心,因为它们可能导致...

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

    总之,Java调用Shell脚本是一个有效的方法来在Java程序中实现复杂的Linux环境下的操作,这种技术尤其适用于需要进行系统级操作和自动化任务的场景。掌握这一技术可以帮助开发者更好地实现跨平台的功能,尤其是在开发...

Global site tag (gtag.js) - Google Analytics