JVM監測分析JConsole

一、基本操作

啟動界面

1.JConsole是什么

從Java 5開始引入了JConsole。JConsole是一個內置Java性能分析器,可以從命令行或在GUI shell中運行。您可以輕松地使用JConsole(或者,它更高端的“近親” VisualVM)來監控Java應用程序性能和跟蹤Java中的代碼。

2.如何啟動JConsole

1)如果是從命令行啟動,使JDK在PATH上,運行jconsole即可。

2)如果從GUI shell啟動,找到JDK安裝路徑,打開bin文件夾,雙擊jconsole。

當分析工具彈出時(取決于正在運行的Java版本以及正在運行的Java程序數量),可能會出現一個對話框,要求輸入一個進程的URL來連接,也可能列出許多不同的本地Java進程(有時包含JConsole進程本身)來連接。如圖所示:

鏈接界面

想分析那個程序就雙擊那個進程。

3.如何設置JAVA程序運行時可以被JConsolse連接分析

本地程序(相對于開啟JConsole的計算機),無需設置任何參數就可以被本地開啟的JConsole連接(Java SE 6開始無需設置,之前還是需要設置運行時參數-Dcom.sun.management.jmxremote)

無認證連接(下面的設置表示:連接的端口為8999、無需認證就可以被連接)

Java代碼

-Djava.rmi.server.hostname=10.0.0.110(服務器IP)

-Dcom.sun.management.jmxremote.port=8999\

-Dcom.sun.management.jmxremote.authenticate=false \

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.port=8999\

-Dcom.sun.management.jmxremote.authenticate=false\

-Dcom.sun.management.jmxremote.ssl=false

4.JConsole如何連接遠程機器的JAVA程序(舉例說明)

1、寫一個簡單的一直運行的JAVA程序,運行在某臺機器上如(192.168.0.181)

Java代碼

1.java -cp .

2.-Djava.rmi.server.hostname=10.0.0.110(服務器IP)

3.-Dcom.sun.management.jmxremote.port=8999

4.-Dcom.sun.management.jmxremote.authenticate=false

5.-Dcom.sun.management.jmxremote.ssl=false

6.JConsoleTest

java -cp .-Dcom.sun.management.jmxremote.port=8999-Dcom.sun.managent.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false JConsoleTest

2、另外一臺機器進行連接

可以直接使用命令:

Java代碼

1.jconsole.exe192.168.0.181:8999

jconsole.exe192.168.0.181:8999

也可以在已經打開的JConsole界面操作 連接->新建連接->選擇遠程進程->輸入遠程主機IP和端口號->點擊“連接”,如圖:

遠程連接

然后就會進入分析界面:

5.通過認證登錄進行遠程連接

如果考慮到安全因素,需要認證,需要安全連接,也是可以搞定的。參考:http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdenv

注意問題

1.-Dcom.sun.management.jmxremote.authenticate=true

2.-Dcom.sun.management.jmxremote.pwd.file指定正確的密碼文件

3.用戶名及密碼(參考jmxremote.password文件) monitorRole只能讀,controlRole能讀寫

配置中的安全原因出錯,由于密碼是以明文的方式保存在:jmxremote.password中,所以對此文件只能有所有者都讀取,其他人都不能讀取。

權限需要注意,600,所有者有rw權限。

4.用戶和權限其實是存在jmxremote.access中。

千萬要注意啊,網上的絕大部分資料,都沒有提到這個文件的真正作用。

我是在嘗試了若干小時之后,才發現這個文件的作用,竟然是如此的大。

有點類似于SVN配置,用戶名-權限,用戶名-密碼,2個配置文件。

fansunion ? readonly

admin ? readwrite \

createjavax.management.monitor.*,javax.management.timer.* \

unregister

jmxremote.password內容

fansunion ?12345

admin ?12345

http://www.linuxidc.com/Linux/2015-02/113415.htm”這篇文章的最后,

"用戶名及密碼(參考jmxremote.password文件) monitorRole只能讀,controlRole能讀寫",給我很大的啟發。

為什么monitorRole和controlRole,這2個角色的權限還不一樣呢,默認注釋的password文件中,沒有看出有啥區別呀。

于是,我才去jmxremote.access文件看了看,最終找到了問題的癥結。

至此,不使用密碼和使用用戶名及密碼,“admin”-“12345”成功登錄42.96.84.84上的Tomcat使用的JVM。

注意:本文中的ip、用戶名、密碼,僅供參考,你懂的。

二、性能分析

下面說說如何分析,如何使用這六個標簽

概述:Displays overview information about the Java VM ? ? and monitored values.

內存:顯示內存使用信息

線程:顯示線程使用信息

類:顯示類裝載信息

*VM摘要:*顯示java VM信息

MBeans:顯示MBeans.

1.概述

概述很簡單沒啥說的,自己看看吧,不過值得一提的是對著圖點擊右鍵可以保存數據到CSV文件,以后可以使用其他工具來分析這些數據。

概述

2.內存

這個比較有價值,參看堆內存,非堆內存,內存池的狀況總體內存的分配和使用情況以及不同的GC進行垃圾回收的次數和時間。可以手動進行GC查看內存變化。

內存

在分析JAVA內存問題進行調優時候非常有用,你要學習JVM內存模型,之后會發現這里的每個值都具有意義。

GC的算法和參數對性能有顯著的影響,注意垃圾回收次數、時間、以及partial GC和full GC,調整你所使用的不同GC和以及各個GC下的參數,然后在這個視圖下觀察,以得到好的性能。

這里貼一下Java HotSpot VM garbage collector下generational GC的各代的劃分圖:

內存模型

關于GC,可以參考:http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

3.線程

左下角顯示所有的活動線程(如果線程過多,可以在下面的過濾欄中輸入字符串過濾出你想要觀察的線程)。點擊某個顯示會顯示這個線程的名稱、狀態、阻塞和等待的次數、堆棧的信息。

線程

統計圖顯示的是線程數目的峰值(紅色)和當前活動的線程(藍色)。另外下面有個按鈕“檢測到死鎖”,有時候會有用處。

4.類

沒啥要說的。

5.VM摘要

也沒啥要說的,看看吧,內存狀況,操作系統...

摘要

6.MBean

這里可以有一些額外的操作。

MBean

7.插件

Java代碼

1.jconsole -pluginpath C:\Java\jdk1.6.0_22\demo\management\JTop\JTop.jar

一看便知,是個什么東西。

JTop

8.推薦使用升級版JConsole即jvisualvm。

關于jvisualvm的使用,->http://jiajun.iteye.com/blog/1180230

-----------------------------------------------------------------------------------------------------------------------

三、參考資料

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.htmlMonitoring 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

1.入門參考

http://www.linuxidc.com/Linux/2015-02/113413.htm

http://www.linuxidc.com/Linux/2015-02/113418.htm

2.最權威的

http://www.linuxidc.com/Linux/2015-02/113419.htm

3.給我很大的啟發,解決用戶名和密碼登錄問題

http://www.linuxidc.com/Linux/2015-02/113415.htm

http://www.linuxidc.com/Linux/2015-02/113420.htm

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容