如何利用 JConsole觀察分析Java程序的運行,進行排錯調優

1、JConsole是什麼

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

2、如何啓動JConsole

  1. 若是是從命令行啓動,使 JDK 在 PATH 上,運行 jconsole 便可。
  2. 若是從 GUI shell 啓動,找到 JDK 安裝路徑,打開 bin 文件夾,雙擊 jconsole 。

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


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

3、如何設置JAVA程序運行時能夠被JConsolse鏈接分析

  1. 本地程序(相對於開啓JConsole的計算機),無需設置任何參數就能夠被本地開啓的JConsole鏈接(Java SE 6開始無需設置,以前仍是須要設置運行時參數 -Dcom.sun.management.jmxremote )
  2. 無認證鏈接 (下面的設置表示:鏈接的端口爲899九、無需認證就能夠被鏈接)
    Java代碼   收藏代碼
    1. -Dcom.sun.management.jmxremote.port=8999 \  
    2. -Dcom.sun.management.jmxremote.authenticate=false \  
    3. -Dcom.sun.management.jmxremote.ssl=false  
     
  3. 若是考慮到安全因素,須要認證,須要安全鏈接,也是能夠搞定的。參考:http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdenv

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

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

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

二、另一臺機器進行鏈接 安全

能夠直接使用命令: oracle

Java代碼  
  1. jconsole.exe 192.168.0.181:8999  

 也能夠在已經打開的JConsole界面操做 鏈接->新建鏈接->選擇遠程進程->輸入遠程主機IP和端口號->點擊「鏈接」,如圖: eclipse

 



 而後就會進入分析界面:  ide

性能分析

下面說說如何分析,如何使用這六個標籤 工具

  • 概述: Displays overview information about the Java VM and monitored values.
  • 內存: 顯示內存使用信息
  • 線程: 顯示線程使用信息
  • 類: 顯示類裝載信息
  • *VM摘要:*顯示java VM信息
  • MBeans: 顯示 MBeans.

概述

 

    概述很簡單沒啥說的,本身看看吧,不過值得一提的是對着圖點擊右鍵能夠保存數據到CSV文件,之後能夠使用其餘工具來分析這些數據。 性能

內存

    這個比較有價值,參看堆內存,非堆內存,內存池的情況整體內存的分配和使用狀況以及不一樣的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

線程

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

 

    統計圖顯示的是線程數目的峯值(紅色)和當前活動的線程(藍色)。

 

   另外下面有個按鈕「檢測到死鎖」,有時候會有用處。

沒啥要說的。

VM摘要

 

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

MBean

這裏能夠有一些額外的操做。

插件

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

 

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

推薦使用升級版 JConsole 即 jvisualvm 。

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

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

參考資料:

  1. Monitoring and Management Using JConsole:http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html
  2. 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
  3. Eclipse launcher for VisualVM : http://visualvm.dev.java.net/eclipse-launcher.html
  4. Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine :http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
相關文章
相關標籤/搜索