jvisualvm遠程監控Tomcat


一.Java VisualVM 概述

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

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

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

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

 

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

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

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

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

 

 

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

 

 

 

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

 

二.使用visualvm 遠程監控 JVM  

1. 測試環境

Ubuntu 16.04LTS

 

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

安裝jdk1.7 :

 

3. 在服務器上配置 jstatd 的 security policy 文件 

   jstatd是一個監控 JVM 從創建到銷毀過程中資源占用情況並提供遠程監控接口的 RMI ( Remote 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 。

   127.0.0.1 主機名

 改為

 本機ip 主機名

   再用 hostname -i檢查

5. 運行 jstatd 守護程序 

 命令如下

sudo jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=本機IP &

 

如果需要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 提示要求端口號。( JMX:Java Management Extensions ,即 Java 管理擴展 , 是一個為應用程序、設備、系統等植入管理功能的框架。 JMX 可以跨越一系列異構操作系統平台、系統體系結構和 網絡傳輸協議,靈活的開發無縫集成的系統、網絡和服務管理應用 。而 Visual VM是通過 JMX 來和遠程 Java 應用聯系的 )。  

7. Tomcat中配置

  下面我們為211 服務器的 tomcat 配置 jvm 啟動參數。 在 tomcat 的 catalina.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 :這個是配置 server 的 IP 的 

 

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

 

 

三.參考博客

http://ihuangweiwei.iteye.com/blog/1219302


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM