VisualVM-BTrace外掛使用備忘
應用場景:
伺服器不適合重啟,除錯資訊又不足夠進行排錯分析的時候
工具:
新增外掛BTrace的 VisualVM (工具-外掛,安裝)
操作步驟:
選擇應用程式右鍵,選擇traceApplication選項
編寫程式碼
書本中的例子:
/* BTrace Script Template */ import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*;
@BTrace public class TracingScript { /* put your code here */ @OnMethod(clazz="com.jiang.JavaVmMemory.BTraceTst",method="add",[email protected](Kind.return)) public static void func(@Self com.jiang.JavaVmMemory.BTraceTst instance,int a,int b,@Return int result){ println("call:"); jstack(); println(strcat("method param A:",str(a))); println(strcat("method param B:",str(b))); println(strct(strcat("mehod result:",str(result)))); } }
點選start...
操作應用程式,可以檢視到需要的資訊
原理分析:
BTrace 主要使用了 Instrumentation + ASM技術來實現對正在執行程序的探測。
Instrumentation :
構建一個獨立於應用程式的代理程式(Agent),用來監測和協助執行在 JVM 上的程式,甚至能夠替換和修改某些類的 定義。實際上提供了一種虛擬機器級別支援的 AOP 實現方式,使得開發者無需對 JDK 做任何升級和改動,就可以實現某 些 AOP 的功能了。
ASM:
ASM 是一個 Java 位元組碼操控框架。它能被用來動態生成類或者增強既有類的功能。