您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么解析Java虛擬機中的Serviceability Agent,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
我們在問題的分析診斷過程中,Debugging 和 Troubleshooting 工具起了很大的作用,有一個稱手的工具,能節省大量的精力,快速解決原本需要耗費許久的工作。但比分析應用更底層的,Low Level 到 JVM 這一層級的工具卻比較少。
比如有些時候,你在分析一個應用問題時,想要了解應用當前內存結構,加載類的內容,線程的 Stack Memory,死鎖分析,存活對象統計和查詢等等。
以上這些,用哪款工具比較合適呢?這些比較低層的分析,只能依靠 JVM 的支持,才能正確的分析。好在官方提供了這樣一款工具。
這就是我們本次要提到的工具,或者準確來說是個工具集,但提供給我們使用時,類似于一站式的感覺。在一個工具里完成大量的需求,它是 Serviceability Agent,更多時候被稱為 SA。
什么是SA?
The Serviceability Agent is a Sun private component in the HotSpot repository that was developed by HotSpot engineers to assist in debugging HotSpot. They then realized that SA could be used to craft serviceability tools for end users since it can expose Java objects as well as HotSpot data structures both in running processes and in core files.
概括來講,這是Sun (Oracle)公司提供的一個用于分析HotSpot運行時和Core文件中數據的工具。可以 attach 到Java 進程或分析 Core文件中的數據,了解加載的 class,是一個包含大量 Java API 和工具的工具集。
而且,SA 在 attatch到 進程之后,會暫停當前進程的執行,拿到的是進程的一個 snapshot。當前進程會在 SA 斷開后繼續執行。
怎樣使用
SA 在JDK中是以 Jar 文件的形式提供的,位于JAVA_HOME/lib/sa-jdi.jar。和一般的 Jar 文件執行一樣。SA提供了兩種使用方式
GUI 方式的 HSDB
命令行的 CLIHSDB。
例如我們使用GUI時,切換到該目錄下,執行如下命令:
java -cp sa-jdi.jar sun.jvm.hotspot.HSDB
選擇 File 菜單下的 Attach to HotSpot Process,輸入Java進程的pid即可。
此時,會看到進程的線程都在列表里展示了。
頂部的一系列圖標,可以查看選定線程的信息,例如能進行 Inspect,查看VM層面 線程對象的結構,選擇 Stack Memory,查看 包含地址信息的stack 的數據。
后面是要以通過 Jstack拿到的Stack Trace。
在 Tools 菜單下,有一系列的工具。
我們選幾個來簡要介紹下。
Class Browser
通過這個,可以看到所有 JVM 加載的 class。對應類內的方法等信息自然也都能查到。它同時還支持把一個 class dump 到本地。這對于一些只能通過 core文件來分析問題的情況,可以拿到 class 來分析。
操作也簡單,找到對應的class, 點擊create class 就OK了, class 生成到lib目錄下。
Find Object by Query
這個功能和 SQL類似,在文本框中輸入要查詢的對象
例如這個:
select t from java.lang.Thread t
Code Viewer
對于一個類內的方法,有些時候需要分析方法的 JVM 指令或者 JIT 編譯后的廣場,可以使用這個工具,在輸入 Class或者 Method的地址后,就會看到其對應的內容
Find Value in Heap
該工具可以在類似于 GC 問題時,通過指定對象的地址查看對象是否還存在于Heap中。
通過SA,我們不僅能分析到 Java 應用層面的東西,而且一些JVM 層面的,甚至 JIT 編譯的方法, GC 是否回收對象,都能夠很容易的了解到,仿佛一個JVM 的顯微鏡,在SA的協助下,問題都無處遁形。
關于怎么解析Java虛擬機中的Serviceability Agent就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。