使用jstat的JVM统计信息
過去,我已經(jīng)寫過關(guān)于Oracle和/或OpenJDK Java開發(fā)工具包(JDK)隨附的幾個命令行工具的信息,但是我從來沒有專門寫過jstat工具 。 Oracle JDK 9文檔Early Access指出jstat用于“監(jiān)視Java虛擬機(JVM)統(tǒng)計信息”。 還有一個警告,“此命令是實驗性的,不受支持。” 盡管我引用了JDK 9文檔,但是jstat以Java SE 8 , Java SE 7 , Java SE 6和J2SE 5中的某種形式( 一次稱為jvmstat )成為Sun / Oracle JDK的一部分。 Java 1.4.1引入了HotSpot JVM的檢測(僅在設(shè)置了-XX:+UsePerfData時啟用),并且自Java 1.4.2開始提供了“始終在線檢測”。
jstat提供的許多信息可以從可視工具(例如VisualVM ,JMX和平臺MBean),垃圾收集日志或通過JVM選項中收集。 但是,與每個替代方案相比, jstat具有優(yōu)勢。 它的優(yōu)點包括命令行工具所共有的優(yōu)點,例如可以從腳本執(zhí)行并運行而無需開發(fā)人員或其他人員。 能夠?qū)stat應(yīng)用于已經(jīng)運行的Java進程以開始監(jiān)視其JVM統(tǒng)計信息,而不是在啟動JVM時指定對那些選項的監(jiān)視,這也很有用。
對于本文中的示例,我正在使用Oracle JDK 9 build 164 。 下一個屏幕快照顯示了該版本,還顯示了開始使用jstat時要應(yīng)用的第一個標(biāo)志之一: -options標(biāo)志。
如屏幕快照所示,以及jstat文檔中所述 , jstat -options用于“顯示特定平臺安裝的選項列表”。 在此處顯示的示例中,以下選項可用:
- -class
- -compiler
- -gc
- -gccapacity
- -gccause
- -gcmetacapacity
- -gcnew
- -gcnewcapacity
- -gcold
- -gcoldcapacity
- -gcutil
- -printcompilation
在本文中,我將只討論這些可用選項的一小部分,但是jstat文檔提供了一個句子來描述每個jstat選項,并且每個選項的命令行用法與所有其他選項非常相似。 實際上,一旦學(xué)習(xí)了有關(guān)jstat使用的一些小知識,各種選項的執(zhí)行就變得容易了。 使用jstat的困難部分通常是解釋jstat提供的數(shù)據(jù)。
jstat -help選項將打印簡單用法,如下一個屏幕快照所示。
從jstat用法消息中,我們了解到j(luò)stat命令行工具是通過首先運行命令名稱( jstat ),其后帶有連字符的選項名稱,然后是可選的-t和/或-h標(biāo)志,以及隨后的命令來執(zhí)行的vimid ,并包含一個可選的時間間隔和在提供的時間間隔上執(zhí)行命令的可選次數(shù)。 示例比描述性文字清晰,這篇文章和jstat文檔中給出了一些示例。
為了監(jiān)視“本地” JVM統(tǒng)計信息, vmid只是JVM進程的進程ID。 這與臀部jcmd (或stodgy jps )為Java進程返回的PID相同。 下一個屏幕快照演示了使用jcmd的Java應(yīng)用程序,我在我的例子(監(jiān)測(在這種情況下,8728)來識別PID JEDIT在這種情況下)。
jstat文檔的“虛擬機標(biāo)識符”部分提供了有關(guān)vmid的更多詳細(xì)信息,因為更復(fù)雜的vmid (用于JVM統(tǒng)計信息的遠(yuǎn)程監(jiān)視)可以包括協(xié)議,本地目標(biāo)計算機的vmid ,主機和端口。 盡管我在本文中所有示例都將使用jstat和一個簡單的Java PID( vmid ),但是jstat文檔的確提供了使用更詳細(xì)的vmid進行JVM統(tǒng)計信息遠(yuǎn)程監(jiān)視的示例。
對于本文其余的示例,我想要一個Java應(yīng)用程序,從JVM統(tǒng)計信息監(jiān)視的角度來看,它比JEdit有趣。 我決定在強烈推薦的Plumbr博客上使用Nikita Salnikov-Tarnovski的帖子“ Garbage Collection:提高吞吐量 ”中的“ PigInThePython ”示例應(yīng)用程序。 如果您有興趣查看PigInThePython的源代碼,請參閱該文章 。
對于使用jstat第一個示例,我使用其最常用的選項之一: -gcutil 。 除了演示-gcutil選項之外,我還將使用第一個示例來演示和解釋除gcutil之外通常適用于其他jstat選項的jstat輸出選項。
以下屏幕快照演示了如何使用jcmd來獲取PigInThePython應(yīng)用程序的PID(在本例中為5096)以及如何以最簡單的形式運行jstat -gcutil 。
jstat -gcutil以最簡單的形式(沒有其他選項)顯示沒有時間戳的單行輸出。 列標(biāo)題中描述jstat文檔節(jié)“-gcutil選項”,其也描述了-gcutil選項如,“垃圾收集統(tǒng)計摘要”。 例如,本文檔說明,其中一些列指示不同空間分配的使用百分比,而其他列指示垃圾收集事件的數(shù)量和垃圾收集的總時間。
我們通常希望將jstat提供的統(tǒng)計信息與受監(jiān)視系統(tǒng)中其他事件發(fā)生的時間相關(guān)聯(lián),以識別這些事件與對JVM的影響之間的相關(guān)性。 jstat -t選項將在輸出的開頭加上時間戳。 此時間戳是自受監(jiān)視的JVM啟動以來的秒數(shù)。 盡管這對于人類而言不像其他格式那樣方便閱讀,但確實可以將JVM統(tǒng)計信息與運行JVM的時間范圍以及包含時間戳的垃圾收集日志相關(guān)聯(lián)。 下一個屏幕快照演示了-t的作用:
監(jiān)視JVM統(tǒng)計信息(例如由jstat -gcutil提交的統(tǒng)計信息)不止一次通常非常有用。 下一個屏幕快照演示了如何使用指定的間隔( 100ms指定的100毫秒間隔,以每100毫秒捕獲并顯示這些結(jié)果。
第一次顯示快照后,最后一個屏幕快照中的輸出永遠(yuǎn)不會重復(fù)帶有列首字母縮寫的標(biāo)題。 如果希望在一定的行數(shù)之后重復(fù)該標(biāo)頭,以便更輕松地知道哪些數(shù)字屬于輸出中更遠(yuǎn)的列,則-h選項可用于指定列之后的結(jié)果數(shù)標(biāo)頭再次顯示。 在下一個屏幕快照中, -h20用于每20行查看一次標(biāo)題。
有時可能需要讓jstat如此頻繁地且僅在一定次數(shù)內(nèi)提供其數(shù)據(jù)。 間隔允許您指定結(jié)果之間的持續(xù)時間,間隔指定之后的任何整數(shù)都將限制顯示結(jié)果的總次數(shù)。 在接下來的屏幕快照,所述15處命令的末尾限制輸出至15點總的行。
jstat -gccause選項返回與-gcutil相同的信息,但還會添加有關(guān)導(dǎo)致受監(jiān)視垃圾收集的原因的信息。 以下屏幕快照對此進行了演示。
在上面的屏幕快照中,我們看到“上次垃圾收集的原因”(LGCC)是“ G1大量分配”,而“當(dāng)前垃圾收集的原因”(GCC)是“無GC”(當(dāng)前沒有垃圾收集)進行)。
下一個屏幕快照演示了如何使用jstat -class查看“類加載器統(tǒng)計信息”,以了解已加載的類數(shù)(“ Loaded”),已加載的千字節(jié)數(shù)(第一個“ Bytes”),已卸載的類數(shù)(“ Unloaded”)以及數(shù)量卸載的字節(jié)數(shù)(第二個“字節(jié)”),以及“執(zhí)行類加載和卸載操作所花費的時間”(“時間”)。
命令jstat -printcompilation指示“ Java HotSpot VM編譯器方法統(tǒng)計信息”,并在下一個屏幕快照中演示。
-printcompilation選項顯示列“已編譯”(“最近編譯的方法執(zhí)行的編譯任務(wù)數(shù)”),“大小”(“最近編譯的方法的字節(jié)碼的字節(jié)數(shù)”),“類型”(“最近編譯的方法的編譯類型”和“方法”(最近編譯的方法的類/方法的名稱,以與HotSpot VM選項-XX:+PrintCompilation一致的格式表示)。
使用jstat -compiler命令,我們可以查看“ Java HotSpot VM即時編譯器統(tǒng)計信息”,例如已執(zhí)行的編譯任務(wù)數(shù)(“ Compiled”),失敗的編譯任務(wù)數(shù)(“ Failed”),無效的編譯任務(wù)數(shù)(“無效”),編譯所花費的時間(“時間”),上次失敗的編譯的類型和類/方法名稱(“ FailedType”和“ FailedMethod”)。 下一個屏幕快照對此進行了演示。
jstat還有其他幾個選項,其中大多數(shù)是特定于受監(jiān)視的JVM中有關(guān)垃圾回收的不同角度的。
jstat文檔警告該工具是試驗性的,在JDK的未來版本中可能會更改或刪除。 該文檔還警告不要編寫腳本和工具來解析jstat的輸出,因為將來輸出的內(nèi)容或格式可能會更改。 但是,我可以看到有人可能會冒這個險并編寫解析代碼,因為可以從腳本輕松訪問此命令行工具,并且所需的解析代碼不會很復(fù)雜。
這篇文章是jstat ,但是要了解更多有關(guān)該工具的知識。 與使用該工具相比,對該工具結(jié)果的解釋要復(fù)雜得多,并且jstat提供的數(shù)據(jù)分析可能比收集數(shù)字的工作更具挑戰(zhàn)性。 下面列出了一些其他資源,以提供有關(guān)使用jstat工具收集和分析Java虛擬機統(tǒng)計信息的更多信息。
其他jstat資源
- Java Platform 9,標(biāo)準(zhǔn)版工具參考指南 : jstat
- Java Platform 8,Standard Edition故障排除指南 : jstat實用程序
- Plumbr:jstat
- 使用jstat監(jiān)視Java垃圾收集
- 解釋jstat的Full GC事件數(shù)
- 解釋jstat(堆內(nèi)存)以懷疑Java內(nèi)存泄漏
- 解釋jstat結(jié)果
- jstat工具:-gc選項提供的新元空間統(tǒng)計信息
- 學(xué)習(xí)java jstat
- 'jstat -gcutil'–垃圾回收統(tǒng)計
- 'jstat'命令選項和參數(shù)
- 使用Jstat在Java中進行GC監(jiān)視
- 在Java中監(jiān)視垃圾收集
- 使用jstat報告自定義JVM指標(biāo)集
翻譯自: https://www.javacodegeeks.com/2017/05/jvm-statistics-jstat.html
總結(jié)
以上是生活随笔為你收集整理的使用jstat的JVM统计信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓万智牌2014汉化破解(安卓万智牌)
- 下一篇: (boot linux)