日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

jcmd:一个可以全部统治的JDK命令行工具

發(fā)布時(shí)間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jcmd:一个可以全部统治的JDK命令行工具 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我在過(guò)去的幾篇文章中都引用了方便的JDK工具jcmd ,但是像我以前對(duì)jps所做的那樣,僅專注于其實(shí)用性 。 jcmd工具是隨Oracle Java 7引入的,在通過(guò)使用Java標(biāo)識(shí)Java進(jìn)程的ID (與jps相似),獲取堆轉(zhuǎn)儲(chǔ) (與jmap相似),獲取線程轉(zhuǎn)儲(chǔ) (與jstack相似)來(lái)解決 JVM應(yīng)用程序 問(wèn)題方面特別有用。 ),查看虛擬機(jī)特征(例如系統(tǒng)屬性和命令行標(biāo)志)(類似于jinfo ),并獲取垃圾回收統(tǒng)計(jì)信息(類似于jstat )。 jcmd工具被稱為“ 用于調(diào)查和解決JVM應(yīng)用程序問(wèn)題的瑞士軍刀 ”和“ 隱藏的寶石” 。

在使用大多數(shù)JDK命令行工具(包括jcmd )時(shí),標(biāo)識(shí)要為其使用命令行工具的Java進(jìn)程的進(jìn)程ID(pid)通常很重要。 只需運(yùn)行不帶任何參數(shù)的命令,使用jcmd即可輕松完成此操作,如下一個(gè)屏幕快照所示。

在上面的示例中,運(yùn)行不帶參數(shù)的jcmd顯示了兩個(gè)正在運(yùn)行的Java進(jìn)程( jcmd自身的pid為324,另一個(gè)Java進(jìn)程的pid為7268)。 請(qǐng)注意,盡管在列出Java進(jìn)程時(shí)jcmd工作原理與jps非常相似,但與沒(méi)有參數(shù)-lm jps相比, jcmd列出的信息更多。

運(yùn)行jcmd -h用于顯示幫助和用法信息jcmd在下一屏幕快照證明。

如剛剛所示,該幫助說(shuō)明jcmd在“未給出任何選項(xiàng)”時(shí)“列出Java進(jìn)程”。 幫助還指出,這是類似于運(yùn)行行為jcmd -p ,但我認(rèn)為它的意思是說(shuō)運(yùn)行jcmd不帶選項(xiàng)相當(dāng)于跑步j(luò)cmd -l ,這是在接下來(lái)的屏幕快照所示。

就像在不帶任何選項(xiàng)的情況下運(yùn)行jcmd , jcmd -l列出了Java進(jìn)程及其各自的pid。 本例中的pids不同,因?yàn)樗莏cmd的不同執(zhí)行, jcmd我運(yùn)行的Java進(jìn)程也不同。

運(yùn)行jcmd -h顯示相對(duì)較少的選項(xiàng)。 要查看jcmd支持的許多功能的幫助,需要詢問(wèn)jcmd特定Java進(jìn)程支持哪些功能。 下一個(gè)屏幕快照對(duì)此進(jìn)行了說(shuō)明。 我首先運(yùn)行不帶選項(xiàng)的jcmd來(lái)發(fā)現(xiàn)感興趣的Java進(jìn)程的pid(在本例中為6320)。 然后,我可以運(yùn)行jcmd 6320 help來(lái)查看jcmd支持哪些命令。

上一個(gè)屏幕快照演示了jcmd支持pid標(biāo)識(shí)的特定Java VM的命令。 具體來(lái)說(shuō),它指出“以下命令可用:”,然后列出它們:

  • JFR停止
  • 啟動(dòng)JFR
  • JFR轉(zhuǎn)儲(chǔ)
  • JFR。檢查
  • VM.native_memory
  • VM.check_commercial_features
  • VM.unlock_commercial_features
  • 管理代理停止
  • ManagementAgent.start_local
  • ManagementAgent.start
  • GC.rotate_log
  • GC.class_stats
  • GC.class_histogram
  • GC.heap_dump
  • GC.run_finalization
  • GC運(yùn)行
  • 線程打印
  • 虛擬機(jī)正常運(yùn)行時(shí)間
  • 虛擬機(jī)標(biāo)志
  • VM.system_properties
  • VM.command_line
  • 虛擬機(jī)版本
  • 幫幫我

當(dāng)針對(duì)另一個(gè)Java VM進(jìn)程的pid運(yùn)行jcmd <pid> help ,可能會(huì)獲得不同的可用命令列表。 下一個(gè)屏幕快照中jcmd 1216 help進(jìn)行了說(shuō)明,當(dāng)針對(duì)該進(jìn)程的pid為1216執(zhí)行jcmd 1216 help時(shí)。

通過(guò)比較最后兩個(gè)屏幕快照,可以清楚地看到j(luò)cmd支持針對(duì)不同Java VM實(shí)例的不同命令。 這就是為什么通過(guò)在help命令中指定pid列出特定VM支持的命令的原因。 未針對(duì)原始檢查的VM列出的第二個(gè)VM可用的一些命令(在這種情況下為pid 1216)包括以下命令:

  • VM.log
  • 管理代理狀態(tài)
  • Compiler.directives_clear
  • Compiler.directives_remove
  • Compiler.directives_add
  • Compiler.directives_print
  • VM.print_touched_methods
  • 編譯器
  • 編譯器代碼清單
  • 編譯器隊(duì)列
  • VM.classloader_stats
  • JVMTI.data_dump
  • VM.stringtable
  • 虛擬機(jī)
  • VM.class_hierarchy
  • GC.finalizer_info
  • GC.heap_info
  • VM.info
  • VM.dynlibs
  • VM.set_flag

該“幫助”還建議:“有關(guān)特定命令的更多信息,請(qǐng)使用'help <command>'。” 在下一個(gè)針對(duì)jcmd的Thread.print屏幕快照中說(shuō)明了jcmd 。

在討論jcmd Thread.print命令的主題時(shí),是一個(gè)很好的時(shí)機(jī)來(lái)說(shuō)明如何使用它來(lái)查看Java進(jìn)程的線程堆棧。 下一個(gè)屏幕快照顯示了執(zhí)行jcmd <pid> Thread.print (在本例中為pid 6320的Java進(jìn)程)時(shí)看到的結(jié)果要冗長(zhǎng)得多的開(kāi)始。

jcmd支持多個(gè)VM.*命令: VM.version , VM.uptime , VM.command_line , VM.flags , VM.system_properties , VM.native_memory和VM.classloader_stats 。 下一個(gè)屏幕快照說(shuō)明了對(duì)于使用pid 6320的Java進(jìn)程使用jcmd <pid> VM.version和jcmd <pid> VM.uptime的情況。

下一個(gè)屏幕快照演示了jcmd <pid> VM.command_line使用pid 6320來(lái)執(zhí)行jcmd <pid> VM.command_line 。

從該屏幕快照(其中顯示了運(yùn)行jcmd 6320 VM.command_line的輸出的頂部)中,我們可以從提供給該進(jìn)程的JVM命令行參數(shù)中看到,它是與NetBeans相關(guān)的進(jìn)程。 使用pid 6320對(duì)Java進(jìn)程運(yùn)行命令jcmd <pid> VM.flags顯示傳遞給該進(jìn)程的HotSpot選項(xiàng)。

可以使用jcmd <pid> VM.system_properties列出Java進(jìn)程使用的系統(tǒng)屬性,這將在下一個(gè)屏幕快照中進(jìn)行說(shuō)明。

當(dāng)嘗試對(duì)尚未啟用本機(jī)內(nèi)存跟蹤 (NMT)的Java進(jìn)程運(yùn)行jcmd <pid> VM.native_memory ,將顯示錯(cuò)誤消息“未啟用本機(jī)內(nèi)存跟蹤”,如下一個(gè)屏幕快照所示。

要使用命令jcmd <pid> VM.native_memory ,應(yīng)使用-XX:NativeMemoryTracking=summary或-XX:NativeMemoryTracking=detail選項(xiàng)啟動(dòng)要測(cè)量的JVM(Java進(jìn)程)。 使用這些選項(xiàng)之一啟動(dòng)VM后,就可以對(duì)該JVM進(jìn)程執(zhí)行命令jcmd <pid> VM.native_memory baseline ,然后執(zhí)行jcmd <pid> VM.native_memory detail.diff 。

jcmd <pid> VM.classloader_stats命令可提供對(duì)類加載器的了解。 下一個(gè)針對(duì)pid 1216的Java進(jìn)程的屏幕快照中顯示了該快照:

jcmd <pid> VM.class_hierarchy是一個(gè)有趣的命令,可打印在目標(biāo)Java VM進(jìn)程中加載??的類的層次結(jié)構(gòu)。

jcmd <pid> VM.dynlibs可用于查看動(dòng)態(tài)庫(kù)信息。 在針對(duì)使用pid 1216的Java進(jìn)程執(zhí)行時(shí)的下一個(gè)屏幕快照中對(duì)此進(jìn)行了演示。

jcmd <pid> VM.info列出了許多有關(guān)目標(biāo)Java VM進(jìn)程的信息,包括VM摘要以及有關(guān)該進(jìn)程,垃圾收集事件,動(dòng)態(tài)庫(kù),提供給VM的參數(shù)以及主機(jī)某些特征的信息。機(jī)。 在jcmd 1216 VM.info的下一個(gè)屏幕快照中演示了此輸出開(kāi)始的一小部分:

下一個(gè)屏幕快照展示了jcmd <pid> VM.stringtable和jcmd <pid> VM.symboltable :

下一個(gè)屏幕快照中演示了jcmd <pid> Compiler.directives_print使用。

jcmd支持的幾個(gè)命令支持管理和監(jiān)視垃圾收集。 其中兩個(gè)是jcmd <pid> GC.run [類似于System.gc() ]和jcmd <pid> GC.run_finalization [類似于System.runFinalization() ]。 在下一個(gè)屏幕快照中將演示其中的兩個(gè)。

命令jcmd <pid> GC.class_histogram提供了一種方便的方法來(lái)查看對(duì)象直方圖 ,如下一個(gè)屏幕快照所示。

jcmd可用于通過(guò)jcmd <pid> GC.heap_dump <filename>針對(duì)正在運(yùn)行的Java VM生jcmd <pid> GC.heap_dump <filename>轉(zhuǎn)儲(chǔ),這將在下一個(gè)屏幕快照中進(jìn)行演示。

現(xiàn)在,可以使用jhat命令來(lái)處理jcmd生成的堆轉(zhuǎn)儲(chǔ),如以下兩個(gè)屏幕快照所示。

有些jcmd命令僅適用于使用-XX:+UnlockDiagnosticVMOptions JVM標(biāo)志啟動(dòng)的Java VM。 下一個(gè)屏幕快照演示了當(dāng)我嘗試針對(duì)未以-XX:+UnlockDiagnosticVMOptions標(biāo)志啟動(dòng)的Java VM運(yùn)行jcmd <pid> GC.class_stats時(shí)發(fā)生的情況。

使用-XX:+UnlockDiagnosticVMOptions啟動(dòng)目標(biāo)VM時(shí), jcmd <pid> GC.class_stats顯示“ 有關(guān)Java類元數(shù)據(jù)的統(tǒng)計(jì)信息 ”。

這篇文章介紹了jcmd提供的一些命令,但沒(méi)有涉及與Java Flight Recorder [ JFR ](名稱以JFR.*開(kāi)頭的命令)相關(guān)的功能,以檢查并啟用商業(yè)功能( jcmd <pid> VM.check_commercial_features和jcmd <pid> VM.unlock_commercial_features )。

在一個(gè)命令行工具中, jcmd匯集了幾個(gè)命令行JDK工具的功能。 這篇文章演示了jcmd提供的一些功能。

翻譯自: https://www.javacodegeeks.com/2016/03/jcmd-one-jdk-command-line-tool-rule.html

總結(jié)

以上是生活随笔為你收集整理的jcmd:一个可以全部统治的JDK命令行工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。