`
laziobird
  • 浏览: 23671 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

btrace动态跟踪线上程序

阅读更多
  • 先贴代码,有时间再补充


  • 获取方法消耗时间和调用者

import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.str;
import static com.sun.btrace.BTraceUtils.strcat;
import static com.sun.btrace.BTraceUtils.timeMillis;

import static com.sun.btrace.BTraceUtils.*;

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.TLS;
@BTrace
public class TraceHelloWorld {

	@TLS
	private static long startTime = 0;

	@OnMethod(clazz = "my.app.test.HelloWorld", method = "execute")
	public static void startMethod(){
		startTime = timeMillis();
	}

	@OnMethod(clazz = "my.app.test.HelloWorld", method = "execute", location = @Location(Kind.RETURN))
	public static void endMethod(){
		println(strcat("the class method execute time=>", str(timeMillis()-startTime)));
		println("-------------------------------------------");
	}

	@OnMethod(clazz = "my.app.test.HelloWorld", method = "execute", location = @Location(Kind.RETURN))
	public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,int sleepTime){
		println(strcat("the class name=>", name));
		println(strcat("the class method=>", method));
		println(strcat("the class method params=>", str(sleepTime)));
		println("who call CaseObject.execute :");
		jstack();

	}
}





  • 跟踪出现异常的方法



import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

/**
 * This example demonstrates printing stack trace
 * of an exception and thread local variables. This
 * trace script prints exception stack trace whenever
 * java.lang.Throwable's constructor returns. This way
 * you can trace all exceptions that may be caught and
 * "eaten" silently by the traced program. Note that the
 * assumption is that the exceptions are thrown soon after
 * creation [like in "throw new FooException();"] rather
 * that be stored and thrown later.
 */
@BTrace public class OnThrow {
    // store current exception in a thread local
    // variable (@TLS annotation). Note that we can't
    // store it in a global variable!
    @TLS static Throwable currentException;

    // introduce probe into every constructor of java.lang.Throwable
    // class and store "this" in the thread local variable.
    @OnMethod(
        clazz="java.lang.Throwable",
        method="<init>"
    )
    public static void onthrow(@Self Throwable self) {
        currentException = self;
    }

    @OnMethod(
        clazz="java.lang.Throwable",
        method="<init>"
    )
    public static void onthrow1(@Self Throwable self, String s) {
        currentException = self;
    }

    @OnMethod(
        clazz="java.lang.Throwable",
        method="<init>"
    )
    public static void onthrow1(@Self Throwable self, String s, Throwable cause) {
        currentException = self;
    }

    @OnMethod(
        clazz="java.lang.Throwable",
        method="<init>"
    )
    public static void onthrow2(@Self Throwable self, Throwable cause) {
        currentException = self;
    }

    // when any constructor of java.lang.Throwable returns
    // print the currentException's stack trace.
    @OnMethod(
        clazz="java.lang.Throwable",
        method="<init>",
        location=@Location(Kind.RETURN)
    )
    public static void onthrowreturn() {
        if (currentException != null) {
            jstack(currentException);
            println("=====================");
            currentException = null;
        }
    }
}


  • 跟踪内存

public class PrintMemory {    
   
    /* 
      * 指定内存区域低于一定的界限的时候才内存使用打印数据<br> 也可以指定时间间隔打印内存使用 
      */   
    @OnLowMemory(pool = "Tenured Gen", threshold = 6000000)    
    public static void printMem(MemoryUsage mu) {    
         print("MemoryUsage : ");    
         println(mu);    
         print("FreeMem : ");    
         println(freeMemory());    
         print("Heap:");    
         println(heapUsage());    
         print("Non-Heap:");    
         println(nonHeapUsage());    
     }    
}   



  • 查看死锁情况

import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

/**
 * This BTrace program demonstrates deadlocks
 * built-in function. This example prints 
 * deadlocks (if any) once every 4 seconds.
 */ 
@BTrace public class Deadlock {
    @OnTimer(4000)
    public static void print() {
        deadlocks();        
    }
}
 



  • btrace使用可以看看这个教程
http://blog.csdn.net/qyongkang/article/details/6090497
分享到:
评论

相关推荐

    btrace java线上debug神器

    它无需修改或重新部署代码,就能实时地对运行中的Java应用程序进行动态追踪,帮助我们收集必要的信息,如方法调用、性能指标、日志记录等。这种“热调试”(hot debugging)的概念使得BTrace在不中断服务的情况下,...

    bTrace跟踪线程堆栈

    描述虽然为空,但我们可以根据标题推测,这篇博文可能讲述了如何使用bTrace来跟踪Java应用程序中的线程堆栈信息。线程堆栈是程序执行时每个线程所维护的一个内存区域,用于存储方法调用的信息。通过查看线程堆栈,...

    java btrace线上代码调试工具

    java btrace线上代码调试工具,可以用来在不关闭线上系统的情况下动态植入调试代码

    btrace1.3.11

    btrace1.3.11,用来动态跟踪线上java代码的隐藏bug、OOM、GC等问题。

    java程序运行跟踪利器Btrace分享

    Btrace就是这样一款强大的工具,它允许开发者在不重启Java应用的情况下,动态地添加探查代码(probe),从而跟踪并理解程序的运行状态。 **Btrace简介** Btrace是由Sun Microsystems开发的一个开放源码的Java运行时...

    一个用于演示btrace功能的demo程序

    这是一个用于演示btrace功能的demo程序, 其中TestJar4是源码,使用maven作为项目管理工具 TestJar4-0.0.1-SNAPSHOT.jar为maven构建之后的jar包 AllMethod.java是trace script

    BTrace-一个用于Java平台的安全动态的跟踪工具

    标题中的"BTrace"是一个专为Java平台设计的安全、动态的跟踪工具,它的主要功能是对正在运行的Java应用程序进行实时监控和诊断。BTrace利用了字节码注入的技术,能够在不修改原有代码的情况下,动态地向目标应用添加...

    BTrace安装包 btrace-bin-1.3.11.3.zip + btrace-src-1.3.11.3.zip

    linux和windows通用,1.3.11版本。btrace-bin直接解压缩配置环境变量后即可运行使用。 java监控调试工具虚拟机监控程序,利用BTrace...BTrace将跟踪操作插入到正在运行的Java程序的类中,并对跟踪的程序类进行热交换。

    btrace:BTrace-用于Java平台的安全,动态跟踪工具

    BTrace动态地检测目标应用程序的类以注入跟踪代码(“字节码跟踪”)。 学分 基于 由提供支持 由提供支持 使用优化 使用构建环境助手 建筑BTrace 建立 您将需要安装以下应用程序 JDK -JDK 8,Java 9和Java 11必须...

    Btrace资源

    Btrace 是一个强大的Java应用程序动态跟踪工具,它允许开发者在不修改代码的情况下,对正在运行的应用程序进行实时监控和诊断。这个资源包包含了Btrace的多个组件,下面我们将逐一介绍。 1. **btracec.bat 和 ...

    btrace-bin.zip

    BTrace是一款强大的Java线上诊断和分析工具,它充分利用了Oracle HotSpot虚拟机的动态类替换功能,允许开发者在不重启应用程序的情况下,实时地添加或修改类的行为,特别是用于添加日志输出,以便于线上问题的调试。...

    btrace调试工具

    BTrace是一款强大的Java应用程序动态跟踪工具,它允许开发者在不修改源代码或重新启动应用的情况下,对正在运行的Java应用程序进行实时的性能分析和诊断。这款工具的核心在于其字节码注入技术,它能够动态地在类的...

    jvisualvm btrace插件离线安装

    在Java开发领域,性能优化是不可或缺的一环,而BTrace作为一个强大的动态跟踪工具,可以帮助开发者实时监控和分析应用程序的行为。本文将详细介绍如何在jVisualVM上进行BTrace插件的离线安装,以便在无法在线安装的...

    btrace.jar

    【btrace.jar】是一款强大的Java在线诊断工具,它允许开发者在不重启应用程序的情况下,实时地对Java程序进行动态追踪和分析。这个工具的核心价值在于它能够帮助我们在生产环境中无侵入地解决性能问题或者追踪特定的...

    btrace-bin-1.3.9

    BTrace作为线上问题定位神器,它在侵入、安全、资源占用等方面表现的都非常出色。

    jdk1.8-Btrace.rar

    Btrace提供了一种动态跟踪Java应用程序的方法,可以在不中断服务的情况下,对代码执行路径进行监控和分析。这包括追踪方法调用、检测变量变化、记录日志等,从而快速定位代码中的性能瓶颈或者错误。由于它不依赖于...

    btrace安装包

    它的核心特性在于能够在不中断程序运行的情况下,动态插入代码进行跟踪和分析,这对于理解复杂的系统行为和定位问题非常有帮助。本安装包包含的是BTrace的1.3.9版本,适用于Linux和Windows操作系统。 1. **BTrace...

    btrace支持jdk1.6上运行的版本

    BTrace 是一个强大的动态代码跟踪工具,它允许开发者在运行时对Java应用程序进行安全的、低开销的、无侵入性的性能和行为分析。这个工具的独特之处在于,它不需要修改或重新编译源代码,而是通过向已运行的应用程序...

    btrace1.3.9.zip

    BTrace,全称为“Bytecode Tracing”,是一款强大的动态代码插桩工具,它允许开发者在运行时对Java应用程序进行性能分析和诊断。BTrace 1.3.9是其一个重要版本,特别针对JDK 1.8进行了优化,同时支持Maven编译构建,...

    如何检测线上代码的运行情况---BTrace使用分享

    BTrace是一款强大的动态代码跟踪工具,它允许我们在运行时无侵入地添加监控代码,以收集应用程序的关键信息。 首先,我们需要理解BTrace的工作原理。BTrace基于Java的字节码注入技术,可以在不修改源代码的情况下,...

Global site tag (gtag.js) - Google Analytics