cjmx:JConsole的命令行版本
當監視正在運行的Java應用程序時,JConsole是一個很好的工具。 但是,當無法使用JConsole直接連接到JVM(例如,由于網絡限制)并且無法進行SSH隧道傳輸時,那么擁有命令行版本的JConsole會很棒。
jcmx是JConsole的命令行版本。 下載單個jar文件cjmx_2.10-2.1.0-app.jar ,可以通過將tools.jar包含到類路徑中來啟動它:
這將使用以下基本命令打開“ JMX shell”:
- help :這會顯示一個基本的幫助屏幕,其中說明了可用的命令。
- jps / list :類似于JDK中的jps工具,此命令將打印出所有Java進程及其進程ID。
- connect :您可以使用此命令連接到正在運行的JVM進程。
- format :讓您指定是使用簡單文本格式還是JSON字符串輸出。
- 退出 :退出應用程序。
要了解有關cjmx的更多信息,讓我們開始一個會話并連接到運行cjmx本身的JVM:
> jps 13198 cjmx.Main > connect 13198 Connected to local virtual machine 13198 Connection id: rmi://0:0:0:0:0:0:0:1 2 Default domain: DefaultDomain 5 domains registered consisting of 19 total MBeans > describe disconnect exit format help invoke mbeans names names sample select status在>的最后一個出現之后,您會看到cjmx的一個強大功能:自動完成。 每次您不知道可用的命令時,只需鍵入[TAB] ,cjmx就會列出它們。 我們將看到,這甚至適用于MBean名稱。
現在我們已連接到JVM,可以讓cjmx描述可用的MBean。 使用自動完成功能,我們可以開始輸入describe '[TAB]來檢索所有可用軟件包的列表:
> describe ' : JMImplementation: com.sun.management: java.lang: java.nio: java.util.logging:通過這種方式,我們可以挖掘MBean名稱,直到找到所需的內容為止。 在此示例中,我們對MBean'java.lang:type = OperatingSystem'感興趣:
> describe 'java.lang:type=OperatingSystem' Object name: java.lang:type=OperatingSystem ------------------------------------------- Description: Information on the management interface of the MBeanAttributes:MaxFileDescriptorCount: longOpenFileDescriptorCount: longFreePhysicalMemorySize: longCommittedVirtualMemorySize: longFreeSwapSpaceSize: longProcessCpuLoad: doubleProcessCpuTime: longSystemCpuLoad: doubleTotalPhysicalMemorySize: longTotalSwapSpaceSize: longAvailableProcessors: intArch: StringSystemLoadAverage: doubleName: StringVersion: StringObjectName: ObjectName如我們所見,MBean'java.lang:type = OperatingSystem'提供了有關打開文件數和當前CPU負載等的信息。因此,讓我們通過調用名稱為的mbeans命令來查詢打開文件數。 MBean以及子命令select和MBean的屬性:
> mbeans 'java.lang:type=OperatingSystem' select OpenFileDescriptorCount java.lang:type=OperatingSystem ------------------------------OpenFileDescriptorCount: 35我們甚至可以使用星號而不是屬性的具體名稱來查詢所有可用屬性。 請注意,使用向上光標鍵可以調出最后發出的命令,因此我們不必再次鍵入該命令。 相反,我們只是將屬性名稱替換為星號:
> mbeans 'java.lang:type=OperatingSystem' select * java.lang:type=OperatingSystem ------------------------------MaxFileDescriptorCount: 10240OpenFileDescriptorCount: 36 ...通過使用子命令invoke我們甚至可以像下面的示例一樣調用MBean方法:
> mbeans 'java.lang:type=Memory' invoke gc() java.lang:type=Memory: null現在我們知道如何查詢屬性和調用方法,我們可以開始編寫此功能的腳本以監視應用程序。 為了支持這種腳本,cjmx提供了可以將所有“命令”也作為參數傳遞給應用程序本身的功能,因此您可以通過以下方式調用cjmx(其中<PID>必須由一個具體的過程代替)正在運行的JVM的ID):
java -cp $JAVA_HOME/lib/tools.jar:cjmx_2.10-2.1.0-app.jar cjmx.Main &lt;PID&gt; &quot;mbeans 'java.lang:type=OperatingSystem' select OpenFileDescriptorCount&quot; java.lang:type=OperatingSystem ------------------------------OpenFileDescriptorCount: 630有了這些知識,我們可以編寫一個簡單的bash腳本,該腳本每秒查詢JVM以獲取打開文件的數量:
#!/bin/bash while [ true ] ; doecho `date` | tr -d '\n'java -cp /usr/java/default/lib/tools.jar:cjmx_2.10-2.1.0-app.jar cjmx.Main $1 &quot;mbeans 'java.lang:type=OperatingSystem' select OpenFileDescriptorCount&quot;|grep OpenFileDescriptorCount|cut -f 2 -d :sleep 1 done這會每秒產生一個帶有時間戳和當前打開文件數的新行。 當重定向到文件中時,我們有一個簡單的日志文件,以后可以對其進行評估。
結論 :當由于服務器計算機上的網絡限制而無法使用JConsole時, cjmx是JConsole的絕佳替代品。 通過在命令行上傳遞命令來發出命令的能力使其適合于小型監視腳本。
翻譯自: https://www.javacodegeeks.com/2014/12/cjmx-a-command-line-version-of-jconsole.html
總結
以上是生活随笔為你收集整理的cjmx:JConsole的命令行版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1963鲶鱼计划指什么 1963鲶鱼计划
- 下一篇: 华为Mate60和Mate50配置对比!