jhsdb:JDK 9的新工具
我喜歡在分析性能和其他基于Java的應(yīng)用程序的其他問(wèn)題的早期步驟中使用JDK隨附的命令行工具,并在諸如jcmd , jps , jstat , jinfo , jhat和jmap , jrunscript , jstack之類(lèi)的 工具上進(jìn)行 博客撰寫(xiě)和jdeps 。 JDK 9帶來(lái)了新的命令行工具與具體涉及到新的JDK 9的功能,如模塊(多個(gè)工具JLINK和JMOD )和增強(qiáng)棄用( jdeprscan )。 在本文中,我將重點(diǎn)介紹JDK 9隨附的用于處理性能和可維護(hù)性問(wèn)題的新命令行工具: jhsdb 。
jhsdb工具在其Oracle JDK 9 Documentation Early Access頁(yè)面上進(jìn)行了描述 ,“您可以使用jhsdb工具將其附加到Java進(jìn)程或啟動(dòng)事后調(diào)試器來(lái)分析崩潰的Java虛擬機(jī)(JVM)的核心轉(zhuǎn)儲(chǔ)內(nèi)容。 )。” 該工具帶有幾個(gè)“模式”,并且這些模式中的幾個(gè)在名稱(chēng)和功能上與以前的JDK發(fā)行版中可用的各個(gè)命令行工具相對(duì)應(yīng)。 jhsdb工具不僅提供包含多個(gè)其他工具功能的單個(gè)工具,而且還提供應(yīng)用這些不同功能的統(tǒng)一方法。 例如,用于獲取每個(gè)“模式”的幫助的jhsdb命令行語(yǔ)法是相同的。
jhsdb工具可以通過(guò)其進(jìn)程標(biāo)識(shí)符(PID)附加并應(yīng)用于正在運(yùn)行的JVM(包括正在掛起的JVM),類(lèi)似于其他幾種工具(包括jcmd )的工作方式。 如果提供了核心文件和可執(zhí)行文件,則jhsdb工具還可用于分析與崩潰的JVM相關(guān)的核心信息。 作為一致性的一個(gè)例子jhsdb提供,其所有的模式支持“共同選項(xiàng)” --pid (指定目標(biāo)JVM的進(jìn)程ID), --exe (指定的目標(biāo)可執(zhí)行), --core (指定目標(biāo)核心轉(zhuǎn)儲(chǔ)文件)和--help (顯示特定于每種模式的選項(xiàng))。
下一系列快照展示了--help選項(xiàng)與主jhsdb命令以及jhsdb的幾種“模式”中的每一個(gè)的jhsdb 。 一個(gè)觀察可以做出的是,常用的選項(xiàng)--pid , --core和--exe由所有模式中提供。 由此可以明顯看出,每種模式所支持的特定功能都是那些“通用”選項(xiàng)以外的功能。
jhsdb“ jstack”模式
jhsdb模式j(luò)stack的--help具有兩個(gè)特定的功能選項(xiàng):-- --locks和--mixed 。 以下兩個(gè)屏幕快照演示了這些內(nèi)容。
剛剛顯示的屏幕快照表明jhsdb工具的jstack模式為我們提供了死鎖檢測(cè)詳細(xì)信息,有關(guān)線程鎖的信息以及本機(jī)框架和Java框架的概述。
jhsdb“ jmap”模式
jhsdb模式j(luò)map的--help顯示了該模式支持的幾個(gè)功能。 當(dāng)僅使用--pid或僅使用--exe / --core組合執(zhí)行jhsdb jmap , 輸出類(lèi)似于 Linux pmap命令提供的輸出 。
正如人們所期望的, jhsdb的jmap模式提供的功能類(lèi)似于單獨(dú)但名稱(chēng)相似的jmap命令提供的功能。 這些包括堆轉(zhuǎn)儲(chǔ)( --heap ),類(lèi)直方圖( --histo ),類(lèi)加載器統(tǒng)計(jì)( --clstats ),和釋放信息( --finalizerinfo )和在以下四個(gè)屏幕快照證明。
jhsdb“ jinfo”模式
不足為奇的是, jinfo所述的模式j(luò)hsdb命令提供了與該重疊通過(guò)所提供的功能性金佛山命令 。 具體而言, jhsdb的jinfo模式允許查看目標(biāo)JVM的標(biāo)志和系統(tǒng)屬性 。
jhsdb jinfo使用三個(gè)主要選項(xiàng):-- --flags查看JVM標(biāo)志,-- --sysprops查看系統(tǒng)屬性,或者no參數(shù)查看標(biāo)志和系統(tǒng)屬性。 接下來(lái)的兩個(gè)屏幕快照演示了jhsdb jinfo --flags和jhsdb jinfo --sysprops 。 不帶任何參數(shù)運(yùn)行jhsdb jinfo先顯示系統(tǒng)屬性,然后顯示標(biāo)志,但此處未顯示。
jhsdb“ jsnap”模式
jhsdb模式j(luò)snap提供對(duì)內(nèi)部類(lèi)sun.jvm.hotspot.tools.JSnap先前提供的信息的訪問(wèn),該類(lèi)先前在lib/sa-jdi.jar可用,并且已添加到 JDK 9的jhdsdb中。有兩個(gè)選項(xiàng)根據(jù)是否提供特定于模式的自變量或是否提供--all特定于模式的自變量從jhsdb jsnap輸出結(jié)果。 接下來(lái)的兩個(gè)屏幕快照演示了這兩個(gè)選項(xiàng)。
這些屏幕快照表明,沒(méi)有特定于模式的選項(xiàng)的jhsdb jsnap列出諸如與線程和類(lèi)加載/卸載有關(guān)的事件以及核心JVM屬性之類(lèi)的信息。 添加--all選項(xiàng)列出了這些相同的屬性,但此外還添加了更多的屬性,并且根據(jù)文檔 ,“打印所有性能計(jì)數(shù)器” 。
順便說(shuō)一下,Marcus Hirt的《使用JVM性能計(jì)數(shù)器》提供了有趣的外觀,介紹如何應(yīng)用JMX和自定義MBean來(lái)實(shí)現(xiàn)“類(lèi)似于JRockit中可用的PerformanceCounters MBean”的工具。 我相信jhsdb jsnap --all帶來(lái)了在HotSpot中查看相同類(lèi)型信息的簡(jiǎn)單功能,就像Hirt所說(shuō)的在jrcmd -l中使用jrcmd -l 。
jhsdb調(diào)試模式
三種jhsdb模式hsdb (用于交互式調(diào)試的圖形用戶界面), clhsdb (用于交互式調(diào)試的命令行界面)和debugd調(diào)試(遠(yuǎn)程調(diào)試服務(wù)器)與調(diào)試操作相關(guān)。 在以后的文章中,我可能會(huì)仔細(xì)研究這些模式,但是現(xiàn)在,我僅顯示一些屏幕快照,這些快照演示了使用jhsdb hsdb的圖形交互。 GUI從jhsdb hsdb --pid <pid>啟動(dòng),此處顯示的大多數(shù)選項(xiàng)都是通過(guò)選擇“工具”下的特定菜單選項(xiàng)來(lái)運(yùn)行的。
正如在HotSpot的“隱藏的寶藏 ”一文中可以看到的那樣,可維護(hù)性調(diào)試器GUI在JDK 9和jhsdb之前就已經(jīng)可用,但是本文還顯示了在JDK 9引入jhsdb之前查找和啟動(dòng)該工具要困難jhsdb 。
jhsdb與jcmd以及與其他命令行JDK工具的關(guān)系
我在博客文章jcmd中總結(jié)了通用工具jcmd與其他JDK提供的命令行工具的關(guān)系:一個(gè)JDK命令行工具可以全部統(tǒng)治它們 。 我在這里修改該表以將jhsdb添加到組合中。
| 列出Java進(jìn)程 | 不適用1 | jcmd | jps -lm |
| 堆轉(zhuǎn)儲(chǔ) | jhsdb jmap --binaryheap | jcmd <pid> GC.heap_dump | jmap -dump <pid> |
| 堆使用直方圖 | jhsdb jmap --histo | jcmd <pid> GC.class_histogram | jmap -histo <pid> |
| 線程轉(zhuǎn)儲(chǔ) | jhsdb jstack --locks (鎖定線程框架的子集) | jcmd <pid> Thread.print | jstack <pid> |
| 列出系統(tǒng)屬性 | jhsdb jinfo --sysprops | jcmd <pid> VM.system_properties | jinfo -sysprops <pid> |
| 列出VM標(biāo)志 | jhsdb jinfo --flags | jcmd <pid> VM.flags | jinfo -flags <pid> |
1您可以使用jcmd或jps -lm標(biāo)識(shí)PID,如果與正在運(yùn)行的JVM jcmd ,則jhsdb , jcmd和許多其他工具將在該P(yáng)ID上起作用。 我在這篇文章中使用jcmd來(lái)標(biāo)識(shí)PID,但是當(dāng)前的jhsdb文檔演示了使用jps來(lái)獲取JVM PID。
jhsdb工具是主要是命令行工具,也具有可選的交互式GUI,該GUI可支持報(bào)告掛起或崩潰的JVM的許多通常需要的屬性。 它提供了跨其模式的一致界面,并且命令行交互允許交互式幫助請(qǐng)求,因此在應(yīng)用該工具之前必須了解或記住很少的語(yǔ)法。 如果可以記住“ jhsdb ”,則可以有效地開(kāi)始使用該工具。 jhsdb工具是JDK 9的新增功能,但將功能集成到一個(gè)工具中,該工具以前可以從幾種不同的工具中獲得。
翻譯自: https://www.javacodegeeks.com/2017/06/jhsdb-new-tool-jdk-9.html
總結(jié)
以上是生活随笔為你收集整理的jhsdb:JDK 9的新工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 尕撒拉原唱 歌曲的歌词内容
- 下一篇: 沉疴是什么意思 沉珂的出处