1. 程式人生 > >使用JDK 1.6自帶的jvisualvm監控遠端伺服器中Java程式資源佔用情況

使用JDK 1.6自帶的jvisualvm監控遠端伺服器中Java程式資源佔用情況

熱度:

      因為做實驗的需要,最近把實驗室的Web資料抽取程式修改為多執行緒版本並在伺服器上做大量的資料抽取工作,伺服器是Ubuntu Server 10.01版本,通過Putty連線監控程式的執行情況非常不直觀,需要使用一個Java資源監控程式實現對目標程式的實時監控。Jdk1.5版本提供的監控工具是Jconsole,相信很多早期的Java開發人員都使用過這個程式,但Jconsole的介面實在是有點對不起觀眾,所以在jdk1.6中Oracle提供了一個新的視覺化的JVM監控工具Java VisualVM(官方介紹連結:http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/applications_remote.html

),在Windows系統下的Java VisualVM啟動路徑是$java_home$/jdk1.6.0/bin/jvisualvm.exe
      雙擊啟動Java VisualVM後可以看到視窗左側“應用程式”欄中有“本地”、“遠端”、“快照”三個專案。其中“本地”下顯示的是在localhost執行的Java程式的資源佔用情況,如果本地有Java程式在執行的話啟動Java VisualVM即可看到相應的程式名,點選程式名開啟相應的資源監控選單,以圖形的形式列出程式所佔用的CPU、Heap、PermGen、類、執行緒的統計資訊。“遠端”項下列出的遠端主機上的Java程式的資源佔用情況,但需要在遠端主機上執行jstatd守護程式
,下面就以實現對遠端Ubuntu Server中執行的Java程式資源監控為例說明如何使用Java VisualVM監控遠端Java程式。
      (1)在伺服器上安裝jstatd元件。由於安裝JDK時配置選項的原因,有的伺服器中沒有預設安裝jstatd元件。jstatd是openjdk中的一個package,使用apt-get命令安裝openjdk即可。關於jstatd元件的詳細介紹可參考:http://download.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html

sudo apt-get install openjdk-6-jdk

      (2)在伺服器上配置jstatd的security policy檔案

。jstatd是一個監控JVM從建立到銷燬過程中資源佔用情況並提供遠端監控介面的RMI(Remote Method Invocation,遠端方法呼叫)伺服器程式,它是一個Daemon程式,要保證遠端監控軟體連線到本地的話需要jstatd始終保持執行。jstatd執行需要通過-J-Djava.security.policy=***指定安全策略,因此我們需要在伺服器上建立一個指定安全策略的檔案jstatd.all.policy,檔案內容如下:

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

      (3)修改伺服器hosts檔案中的IP地址。要使Java VisualVM成功連線到遠端伺服器上,伺服器端應該在/etc/hosts檔案中把本機地址設為本機的IP地址。使用hostname -i命令檢視,如果顯示的是127.0.0.1或者與本機實際IP不一致的話,需要把/etc/hosts檔案中相應的地址改為本機實際IP。
      (4)執行jstatd守護程式。由於jstatd需要保持一直執行,所以建議使用screen命令執行jstatd程式,命令如下:

screen jstatd -J-Djava.security.policy=jstatd.all.policy

如果需要RMI日誌功能的話,還可以在啟動引數中加入-J-Djava.rmi.server.logCalls=true。jstatd開始執行後,使用CTRL+A+D斷開screen介面,回到shell介面。如果想切換回jstatd執行介面的話,使用screen -r -d命令即可。
      (5)通過Java VisualVM連線到伺服器監控Java程式。在Java VisualVM程式視窗左側“遠端”專案右鍵選擇“新增遠端主機”,在彈出的對話方塊中輸入遠端主機的IP地址,確認提交後即可看到相應的遠端主機和在上面執行的Java程式,連線成功後應該會顯示Jstatd及其PID。

另外一種方式:

tomcat catalina中配置

JAVA_OPTS=' -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'