jstat和jvisualVm

一.Java VisualVM 概述


  對於使用命令行遠程監控jvm太麻煩jdk1.6Oracle提供了一個新的可視化的。JVM監控工具Java VisualVMjvisualvm.exeJDKbin目錄下。

 

  雙擊啓動Java VisualVM後可以看到窗口左側應用程序欄中有“本地”、“遠程、“快照三個項目。

 

 本地下顯示的是在localhost運行的Java程序的資源佔用情況,如果本地有Java程序在運行的話啓動Java VisualVM即可看到相應的程序名,點擊程序名打開相應的資源監控菜單,以圖形的形式列出程序所佔用的CPUHeapPermGen、類、線程的 統計信息。


 遠程”項下列出的遠程主機上的Java程序的資源佔用情況,但需要在遠程主機上運行jstatd守護程序

 


VisualVM分爲3類,本地它會自動偵測到,並顯示出來

雙擊Local下的任一節點,看到右邊的變化,你可以監控CPU,內存,類,線程等運行狀況,實時監控服務器性能。

 


 右鍵VisualVM我們可以看到Thread Dump, Heap Dump

 Thread Dump很快,馬上就可以看到結果

 

 

Heap Dump要稍花費一些時間(可以看到當前heap裏對象的數量及佔用的比例,做OOM很好用)

 

 

 

對其功能不再做描述,可以查閱網上相關質量,我們主要講的是如何使用VisualVM遠程監控。


二.使用visualvm 遠程監控 JVM 

1.測試環境

Ubuntu Server 10.01

 

2. 在服務器上安裝jstatd組件

使用apt-get命令安裝openjdk即可:

 

Java代碼  收藏代碼
  1. sudo apt-get install openjdk-6-jdk  

 

3.在服務器上配置jstatdsecurity policy文件

   jstatd是一個監控JVM從創建到銷燬過程中資源佔用情況並提供遠程監控接口的RMIRemote Method Invocation,遠程方法調用)服務器程序,它是一個Daemon程序,要保證遠程監控軟件連接到本地的話需要jstatd始終保持運行。 

   jstatd運行需要通過-J-Djava.security.policy=***指定安全策略,因此我們需要在服務器上建立一個指定安全策略的文件jstatd.all.policy,文件內容如下:

 

Java代碼  收藏代碼
  1. grant codebase "file:${java.home}/../lib/tools.jar" {  
  2.    permission java.security.AllPermission;  
  3. };  

 

 

4.修改服務器hosts文件中的IP地址

 

   要使Java VisualVM成功連接到遠程服務器上,服務器端應該在/etc/hosts文件中把本機地址設爲本機的IP地址。使用hostname -i命令查看,如果顯示的是127.0.0.1或者與本機實際IP不一致的話,需要把/etc/hosts文件中相應的地址改爲本機實際IP

 

5.運行jstatd守護程序

 

  由於jstatd需要保持一直運行,所以建議使用screen命令執行jstatd程序,命令如下:

Java代碼  收藏代碼
  1. screen jstatd -J-Djava.security.policy=jstatd.all.policy  

 

如果需要RMI日誌功能的話,還可以在啓動參數中加入-J-Djava.rmi.server.logCalls=true

Java代碼  收藏代碼
  1. screen jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true  

 

 

jstatd開始運行後,使用CTRL+A+D斷開screen界面,回到shell界面。如果想切換回jstatd運行界面的話,使用screen -r -d命令即可。

 

6.通過Java VisualVM連接到服務器監控Java程序

   在Java VisualVM程序窗口左側遠程項目右鍵選擇添加遠程主機,在彈出的對話框中輸入遠程主機的IP地址,確認提交後即可看到相應的遠程主機和在上面運行的Java程序,連接成功後應該會顯示Jstatd及其PID

 

 

  通過以上方式連接服務器發現一個問題,不能監控CPU。提示我們建立JMX,建立JMX提示要求端口號。(JMXJava Management Extensions,即Java管理擴展,是一個爲應用程序、設備、系統等植入管理功能的框架。JMX可以跨越一系列異構操作系統平臺、系統體系結構和 網絡傳輸協議,靈活的開發無縫集成的系統、網絡和服務管理應用。而Visual VM是通過JMX來和遠程Java應用聯繫的)。

 

 

7.Tomcat中配置

  下面我們爲54服務器的tomcat配置jvm啓動參數。tomcatcatalina.sh中添加如下參數:

Java代碼  收藏代碼
  1. JAVA_OPTS='-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'   

 

或:

Java代碼  收藏代碼
  1. JAVA_OPTS=’-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.1.54  其他配置’  

 

 

 

注:1.-Dcom.sun.management.jmxremote.port:這個是配置遠程connection的端口號的,要確定這個端口沒有被佔用

2.-Dcom.sun.management.jmxremote.ssl=false 指定了JMX是否啓用ssl

3.-Dcom.sun.management.jmxremote.authenticate=false 指定了JMX是否啓用鑑權(需要用戶名,密碼鑑權)

   2,3兩個是固定配置,是JMX的遠程服務權限的

4.-Djava.rmi.server.hostname:這個是配置serverIP

 

 

連接成功,現在我們可以遠程監控服務器性能,可以配合jmeter進行了一個長時間的加壓,在加壓過程中重點關注了系統資源的使用情況。

三.參考博客

http://mahuihuang.blog.163.com/blog/static/745292520113202321494/

 

http://wolfdream.iteye.com/blog/1032712

 

http://sjsky.iteye.com/blog/705323


http://www.blogjava.net/titanaly/archive/2012/03/20/372318.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章