阿里開源線上應用調試利器 Arthas的背后


Arthas是一個功能非常強大的診斷工具,功能點很多,例如:jvm信息、線程信息、搜索類中的方法、跟蹤代碼執行、觀測方法的入參和返回參數等等。

作為有追求的程序員,你不僅要知道它能做什么,更要思考它是是如何做到的。在這之前你可能還需要了解一些額外的知識,例如ava SE 5中增加的特性Instrumentation、ASM字節碼增強技術。 

Instrumentation把 Java的instrument 功能從本地代碼中解放出來,使之可以用Java代碼的方式解決問題。使用 Instrumentation,開發者可以構建一個獨立於應用程序的代理程序(Agent),用來監測和協助運行在 JVM 上的程序,甚至能夠替換和修改某些類的定義。Instrumentation是Java SE 5中的新特性。在SE 5中只能在運行前進行加載,在SE 6中實現能夠在運行時加載。例如java -javaagent: agent.jar -jar agent-demo.jar

ASM是一個java字節碼操縱框架,它能被用來動態生成類或者增強既有類的功能。ASM 可以直接產生二進制 class 文件,也可以在類被加載入 Java 虛擬機之前動態改變類行為。Java class 被存儲在嚴格格式定義的 .class文件里,這些類文件擁有足夠的元數據來解析類中的所有元素:類名稱、方法、屬性以及 Java 字節碼(指令)。ASM從類文件中讀入信息后,能夠改變類行為,分析類信息,甚至能夠根據用戶要求生成新類。asm字節碼增強技術主要是用來反射的時候提升性能的,如果單純用jdk的反射調用,性能是非常低下的,而使用字節碼增強技術后反射調用的時間已經基本可以與直接調用相當。

ASM相對於其他類似工具如BCEL、SERP、Javassist、CGLIB,它的最大的優勢就在於其性能更高,其jar包僅30K。Hibernate和Spring都使用了cglib代理,而cglib本身就是使用的ASM,可見ASM在各種開源框架都有廣泛的應用。  

ASM框架中的核心類有以下幾個:  

① ClassReader:該類用來解析編譯過的class字節碼文件。   

② ClassWriter:該類用來重新構建編譯后的類,比如說修改類名、屬性以及方法,甚至可以生成新的類的字節碼文件。   

③ ClassAdapter:該類也實現了ClassVisitor接口,它將對它的方法調用委托給另一個ClassVisitor對象。

在線分析診斷工具Arthas簡介及使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM