溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么解析Java虛擬機中的Serviceability Agent

發(fā)布時間:2021-11-20 16:44:40 來源:億速云 閱讀:217 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹怎么解析Java虛擬機中的Serviceability Agent,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

我們在問題的分析診斷過程中,Debugging Troubleshooting 工具起了很大的作用,有一個稱手的工具,能節(jié)省大量的精力,快速解決原本需要耗費許久的工作。但比分析應(yīng)用更底層的,Low Level 到 JVM 這一層級的工具卻比較少。

比如有些時候,你在分析一個應(yīng)用問題時,想要了解應(yīng)用當(dāng)前內(nèi)存結(jié)構(gòu),加載類的內(nèi)容,線程的 Stack Memory,死鎖分析,存活對象統(tǒng)計和查詢等等。

以上這些,用哪款工具比較合適呢?這些比較低層的分析,只能依靠 JVM 的支持,才能正確的分析。好在官方提供了這樣一款工具。

這就是我們本次要提到的工具,或者準(zhǔn)確來說是個工具集,但提供給我們使用時,類似于一站式的感覺。在一個工具里完成大量的需求,它是 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文件中數(shù)據(jù)的工具。可以 attach 到Java 進程或分析 Core文件中的數(shù)據(jù),了解加載的 class,是一個包含大量 Java API 和工具的工具集。

而且,SA 在 attatch到 進程之后,會暫停當(dāng)前進程的執(zhí)行,拿到的是進程的一個 snapshot。當(dāng)前進程會在 SA 斷開后繼續(xù)執(zhí)行。

怎樣使用

SA 在JDK中是以 Jar 文件的形式提供的,位于JAVA_HOME/lib/sa-jdi.jar。和一般的 Jar 文件執(zhí)行一樣。SA提供了兩種使用方式

  •  GUI 方式的 HSDB 

  •  命令行的 CLIHSDB。

例如我們使用GUI時,切換到該目錄下,執(zhí)行如下命令:

java -cp sa-jdi.jar sun.jvm.hotspot.HSDB

選擇 File 菜單下的 Attach  to HotSpot Process,輸入Java進程的pid即可。

此時,會看到進程的線程都在列表里展示了。

怎么解析Java虛擬機中的Serviceability Agent

 頂部的一系列圖標(biāo),可以查看選定線程的信息,例如能進行 Inspect,查看VM層面 線程對象的結(jié)構(gòu),選擇 Stack Memory,查看 包含地址信息的stack 的數(shù)據(jù)。

怎么解析Java虛擬機中的Serviceability Agent

后面是要以通過 Jstack拿到的Stack Trace。

在 Tools 菜單下,有一系列的工具。

怎么解析Java虛擬機中的Serviceability Agent

我們選幾個來簡要介紹下。

Class Browser

通過這個,可以看到所有 JVM 加載的 class。對應(yīng)類內(nèi)的方法等信息自然也都能查到。它同時還支持把一個 class dump 到本地。這對于一些只能通過 core文件來分析問題的情況,可以拿到 class 來分析。

操作也簡單,找到對應(yīng)的class, 點擊create class 就OK了, class 生成到lib目錄下。

怎么解析Java虛擬機中的Serviceability Agent

Find Object by Query

這個功能和 SQL類似,在文本框中輸入要查詢的對象

例如這個:

select t from java.lang.Thread t 

怎么解析Java虛擬機中的Serviceability Agent

Code Viewer

對于一個類內(nèi)的方法,有些時候需要分析方法的 JVM 指令或者 JIT 編譯后的廣場,可以使用這個工具,在輸入 Class或者 Method的地址后,就會看到其對應(yīng)的內(nèi)容

怎么解析Java虛擬機中的Serviceability Agent

Find Value in Heap

該工具可以在類似于 GC 問題時,通過指定對象的地址查看對象是否還存在于Heap中。

怎么解析Java虛擬機中的Serviceability Agent

通過SA,我們不僅能分析到 Java 應(yīng)用層面的東西,而且一些JVM 層面的,甚至 JIT 編譯的方法, GC 是否回收對象,都能夠很容易的了解到,仿佛一個JVM 的顯微鏡,在SA的協(xié)助下,問題都無處遁形。

關(guān)于怎么解析Java虛擬機中的Serviceability Agent就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI