如何利用JConsole觀察分析Java程序的運(yùn)行并進(jìn)行排錯(cuò)調(diào)優(yōu)
一、JConsole是什么
從Java 5開(kāi)始 引入了 JConsole。JConsole 是一個(gè)內(nèi)置 Java 性能分析器,可以從命令行或在 GUI shell 中運(yùn)行。您可以輕松地使用 JConsole(或者,它更高端的 “近親” VisualVM )來(lái)監(jiān)控 Java 應(yīng)用程序性能和跟蹤 Java 中的代碼。
二、如何啟動(dòng)JConsole
1.如果是從命令行啟動(dòng),使 JDK 在 PATH 上,運(yùn)行 jconsole 即可。
2.如果從 GUI shell 啟動(dòng),找到 JDK 安裝路徑,打開(kāi) bin 文件夾,雙擊 jconsole 。
當(dāng)分析工具彈出時(shí)(取決于正在運(yùn)行的 Java 版本以及正在運(yùn)行的 Java 程序數(shù)量),可能會(huì)出現(xiàn)一個(gè)對(duì)話框,要求輸入一個(gè)進(jìn)程的 URL 來(lái)連接,也可能列出許多不同的本地 Java 進(jìn)程(有時(shí)包含 JConsole 進(jìn)程本身)來(lái)連接。如圖所示:
想分析那個(gè)程序就雙擊那個(gè)進(jìn)程。
三、如何設(shè)置JAVA程序運(yùn)行時(shí)可以被JConsolse連接分析
1.本地程序(相對(duì)于開(kāi)啟JConsole的計(jì)算機(jī)),無(wú)需設(shè)置任何參數(shù)就可以被本地開(kāi)啟的JConsole連接(Java SE 6開(kāi)始無(wú)需設(shè)置,之前還是需要設(shè)置運(yùn)行時(shí)參數(shù) -Dcom.sun.management.jmxremote )
2.無(wú)認(rèn)證連接 (下面的設(shè)置表示:連接的端口為8999、無(wú)需認(rèn)證就可以被連接)
-Dcom.sun.management.jmxremote.port=8999 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false
3.如果考慮到安全因素,需要認(rèn)證,需要安全連接,也是可以搞定的。參考:http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdenv
四、JConsole如何連接遠(yuǎn)程機(jī)器的JAVA程序(舉例說(shuō)明)
1、寫(xiě)一個(gè)簡(jiǎn)單的一直運(yùn)行的JAVA程序,運(yùn)行在某臺(tái)機(jī)器上如(192.168.0.181)
java -cp . -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.managent.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false JConsoleTest
2、另外一臺(tái)機(jī)器進(jìn)行連接
可以直接使用命令:
jconsole.exe 192.168.0.181:8999
也可以在已經(jīng)打開(kāi)的JConsole界面操作 連接->新建連接->選擇遠(yuǎn)程進(jìn)程->輸入遠(yuǎn)程主機(jī)IP和端口號(hào)->點(diǎn)擊“連接”,如圖:
然后就會(huì)進(jìn)入分析界面:
性能分析
下面說(shuō)說(shuō)如何分析,如何使用這六個(gè)標(biāo)簽
• 概述: Displays overview information about the Java VM and monitored values.
• 內(nèi)存: 顯示內(nèi)存使用信息
• 線程: 顯示線程使用信息
• 類(lèi): 顯示類(lèi)裝載信息
•*VM摘要:*顯示java VM信息
• MBeans: 顯示 MBeans.
然后就會(huì)進(jìn)入分析界面:
概述
概述很簡(jiǎn)單沒(méi)啥說(shuō)的,自己看看吧,不過(guò)值得一提的是對(duì)著圖點(diǎn)擊右鍵可以保存數(shù)據(jù)到CSV文件,以后可以使用其他工具來(lái)分析這些數(shù)據(jù)。
這個(gè)比較有價(jià)值,參看堆內(nèi)存,非堆內(nèi)存,內(nèi)存池的狀況總體內(nèi)存的分配和使用情況以及不同的GC進(jìn)行垃圾回收的次數(shù)和時(shí)間。可以手動(dòng)進(jìn)行GC查看內(nèi)存變化。
在分析JAVA內(nèi)存問(wèn)題進(jìn)行調(diào)優(yōu)時(shí)候非常有用,你要學(xué)習(xí)JVM內(nèi)存模型,之后會(huì)發(fā)現(xiàn)這里的每個(gè)值都具有意義。
GC的算法和參數(shù)對(duì)性能有顯著的影響,注意垃圾回收次數(shù)、時(shí)間、以及partial GC和full GC,調(diào)整你所使用的不同GC和以及各個(gè)GC下的參數(shù),然后在這個(gè)視圖下觀察,以得到好的性能。
這里貼一下 Java HotSpot VM garbage collector 下generational GC 的各代的劃分圖:
關(guān)于GC,可以參考:http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
左下角顯示所有的活動(dòng)線程(如果線程過(guò)多,可以在下面的過(guò)濾欄中輸入字符串過(guò)濾出你想要觀察的線程)。點(diǎn)擊某個(gè)顯示會(huì)顯示這個(gè)線程的名稱、狀態(tài)、阻塞和等待的次數(shù)、堆棧的信息。
統(tǒng)計(jì)圖顯示的是線程數(shù)目的峰值(紅色)和當(dāng)前活動(dòng)的線程(藍(lán)色)。
另外下面有個(gè)按鈕“檢測(cè)到死鎖”,有時(shí)候會(huì)有用處。
類(lèi)
沒(méi)啥要說(shuō)的。
也沒(méi)啥要說(shuō)的,看看吧,內(nèi)存狀況,操作系統(tǒng)...
這里可以有一些額外的操作。
jconsole -pluginpath C:\Java\jdk1.6.0_22\demo\management\JTop\JTop.jar
一看便知,是個(gè)什么東西。
推薦使用升級(jí)版 JConsole 即 jvisualvm 。
關(guān)于jvisualvm的使用,-> http://www.dbjr.com.cn/article/77131.htm
參考資料:
- Monitoring and Management Using JConsole :http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html
- http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html Monitoring and Management Using JMX Technology :http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html
- Eclipse launcher for VisualVM : http://visualvm.dev.java.net/eclipse-launcher.html
- Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine : http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
相關(guān)文章
Java實(shí)現(xiàn)簡(jiǎn)易圖書(shū)借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易圖書(shū)借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對(duì)比
本文主要介紹了Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對(duì)比,分享給大家,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08spring整合atomikos實(shí)現(xiàn)分布式事務(wù)的方法示例
本文整合了一個(gè)spring和atomikos的demo,并且通過(guò)案例演示說(shuō)明atomikos的作用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05詳解APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào))
這篇文章主要介紹了APP微信支付(java后臺(tái)_統(tǒng)一下單和回調(diào)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05深入Java7的一些新特性以及對(duì)腳本語(yǔ)言支持API的介紹
本篇文章是對(duì)Java7的一些新特性以及對(duì)腳本語(yǔ)言支持API的概述,需要的朋友參考下2013-05-05