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