jinfo:JVM运行时配置的命令行浏览
在最近的幾篇博客中(特別是在對Java EE 7性能調優和優化以及WildFly性能調優的書的評論中),我引用了自己過去在某些Oracle JDK命令行工具上的博客文章。 令我震驚的是,我從來沒有專門解決過漂亮的jinfo工具,這篇文章旨在糾正這種令人不安的情況。 我懷疑我以前選擇不寫jinfo的原因包括我在VisualVM中討論的與jinfo相關的限制:jinfo和So Much More 。
在我的機器上運行的Java SE 8版本的jinfo中,解決了我在“ 獲取JVM運行時信息”一文中討論的Windows上jinfo的主要限制。 特別是,我在-flags文章中指出,當時Windows版本的jinfo不支持-flags選項。 正如下一個屏幕快照所證明的,情況已不再如此(請注意使用jps獲取Java進程ID以指示jinfo進行查詢)。
如上面的屏幕快照所示, jinfo -flags命令和option顯示了標志,這些標志是要監視的Java進程的顯式指定的JVM選項。
如果我想了解其他隱式(自動)有效的JVM標志,則可以運行java -XX:+ PrintFlagsFinal來查看所有默認的JVM選項。 然后,我可以針對正在運行的JVM進程查詢其中的任何一個,以查明該特定JVM使用的是什么(相同的默認值或覆蓋的不同值)。 下一個屏幕快照演示了如何通過運行java -XX:+PrintFlagsFinal提供一小部分輸出。
假設我在上面的輸出中注意到一個名為PrintHeapAtGC的標志,并想知道它是否在我的特定Java應用程序中設置( -XX:+PrintHeapAtGC表示已設置, -XX:-PrintHeapAtGC表示未設置)。 我可以讓jinfo告訴我它的設置是什么(請注意,在這種情況下,我選擇使用jcmd而不是jps來確定Java進程ID):
由于冒號后和“ PrintHeapAtGC”之前的減號(-)而不是加號(+),我們知道對于具有指定ID的Java進程已將其關閉。 事實證明,jinfo的作用不僅僅讓我們看。 這也讓我們感動。 下一個屏幕快照顯示了使用jinfo更改此選項。
如上一個屏幕快照所示,我可以通過使用相同的命令查看標志的設置來關閉和打開布爾樣式的JVM選項,但是在標志名的前面加上加號(+)將其打開或加減。簽署(-)將其關閉。 在剛剛顯示的示例中,我關閉了PrintGCDateStamps ,再次將其重新打開,并在這些更改之間監視其設置。 并非所有的JVM選項都是布爾條件。 在這些情況下,通過將等號(=)和標志值后面的新值串聯起來,為它們分配新值。 同樣重要的是要注意目標JVM(您試圖窺視并接觸jinfo的目標JVM將不允許您更改其所有JVM選項設置)。 在這種情況下,您可能會看到堆棧跟蹤,并顯示消息“目標VM中的命令失敗”。
除了顯示當前正在運行的JVM的選項并允許對其中一些選項進行更改之外, jinfo還允許您將該JVM使用的系統屬性視為名稱/值對。 在下一個屏幕快照中對此進行了演示,并顯示了輸出的一小部分。
運行jinfo的最簡單方法可能就是僅提供所討論的Java進程的PID以外的任何參數,并同時顯示JVM選項(非默認值和命令行)和系統屬性。 運行jinfo -help提供簡要的用法詳細信息。 其他重要的詳細信息可以在jinfo工具的Oracle文檔中找到。 這些詳細信息包括常見的提示(涉及這些工具時),提示該工具“是實驗性的,不受支持”,并且“將來的JDK版本可能不可用”。 我們還警告我們Windows上的jinfo需要dbgeng.dll或已安裝的Windows調試工具的可用性。
盡管我之前在VisualVM:jinfo和更多內容以及獲得JVM運行時信息一文中已經引用了方便的jinfo命令行工具,但它已經足夠方便地證明了自己的帖子。 作為命令行工具,它具有與命令行工具通常相關的優點,例如相對輕量級,可以很好地與腳本一起使用以及在無頭環境中工作。
翻譯自: https://www.javacodegeeks.com/2014/08/jinfo-command-line-peeking-at-jvm-runtime-configuration.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的jinfo:JVM运行时配置的命令行浏览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软:Windows 更新将逐步不再提供
- 下一篇: JPA教程–在Java SE环境中设置J