1. 程式人生 > >jvisualvm遠端監控Tomcat

jvisualvm遠端監控Tomcat

VisualVM 簡介

VisualVM 是一個工具,它提供了一個可視介面,用於檢視 Java 虛擬機器 (Java Virtual Machine, JVM) 上執行的基於 Java 技術的應用程式(Java 應用程式)的詳細資訊。VisualVM 對 Java Development Kit (JDK) 工具所檢索的 JVM 軟體相關資料進行組織,並通過一種使您可以快速檢視有關多個 Java 應用程式的資料的方式提供該資訊。您可以檢視本地應用程式以及遠端主機上執行的應用程式的相關資料。此外,還可以捕獲有關 JVM 軟體例項的資料,並將該資料儲存到本地系統,以供後期檢視或與其他使用者共享。

為了能充分利用所有的 Java VisualVM 功能,應執行 Java Platform, Standard Edition (Java SE) 版本 6。

啟動 VisualVM

在下載 VisualVM zip 歸檔檔案並將其解壓縮到本地系統之後,導航至展開的歸檔檔案的 bin 目錄,然後雙擊 VisualVM 可執行檔案,或在命令 (shell) 提示符下鍵入以下內容:

visualvm

首次啟動 VisualVM 時,系統將提示您接受許可證協議。

VisualVM 使用者目錄

在 Windows 上,VisualVM 使用者目錄的預設位置為:

C:\Documents and Settings\<USER>

\Application Data\.visualvm\FCS

要查詢 VisualVM 使用者目錄的位置,請從主選單中選擇“幫助”>“關於”,然後在“關於 VisualVM”視窗中單擊“詳細資訊”。

VisualVM 視窗

在啟動 VisualVM 後,將開啟 VisualVM 主視窗。VisualVM 主視窗分為兩個視窗。

螢幕快照:包含起始螢幕的 VisualVM 視窗

首次啟動 VisualVM 時,“應用程式”視窗顯示在主視窗的左側,“起始頁”顯示在主視窗的右側。“起始頁”包含指向 VisualVM 文件 Web 頁和其他資源的連結。
注意:預設情況下,每次啟動 VisualVM 時都將開啟“起始頁”。通過從主選單中選擇“幫助”>“起始頁”,可以隨時開啟“起始頁”。此外,還可以通過取消選中“啟動時顯示”複選框隱藏“起始頁”。

“應用程式”視窗

啟動應用程式後,將在 VisualVM 主視窗的左側開啟“應用程式”視窗。“應用程式”視窗是瀏覽正在執行的應用程式詳細資訊的主入口點。“應用程式”視窗採用樹結構,以便您可以快速檢視本地計算機和任何已連線的遠端計算機上執行的應用程式。您還可以從“應用程式”視窗中訪問核心 dump (Solaris/Linux) 和儲存的快照。

右鍵單擊“應用程式”視窗中的某個節點將開啟一個彈出式選單,通過該選單可以執行與該節點相關的操作,其中包括開啟應用程式標籤、生成堆 dump 和執行緒 dump,以及在主視窗中開啟快照。

有關如何使用“應用程式”視窗檢視和儲存資料的更多詳細資訊,請參見以下頁面:

主視窗

主視窗中顯示有關應用程式的詳細資訊。在檢視有關應用程式的資料時,主視窗中的每個標籤表示一個應用程式,這使您可以輕鬆檢視和導航資料。儲存的執行緒 dump 和堆 dump 也可以在主視窗中開啟。

有關主視窗中可以顯示的應用程式資料的資訊,請參見以下頁面:

VisualVM 外掛

通過使用“外掛”管理器安裝由“VisualVM 外掛中心”提供的外掛,可以向 VisualVM 新增功能。您也可以開發自己的外掛,然後將其新增到更新中心來擴充套件 VisualVM 的功能。

例如,安裝 VisualVM-MBeans 外掛可以嚮應用程式標籤中新增 "MBeans" 標籤,通過此標籤,可以在 VisualVM 內監視和管理 MBeans。

安裝 VisualVM 外掛:

  1. 從主選單中選擇“工具”>“外掛”。
  2. 在“可用外掛”標籤中,選中該外掛的“安裝”複選框。單擊“安裝”。
  3. 逐步完成外掛安裝程式。
螢幕快照:“外掛”視窗

有關建立 VisualVM 外掛的更多資訊,請參見以下文件:


一.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 Server 10.01

2.  在伺服器上安裝 jstatd 元件

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

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

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 。

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 提示要求埠號。( JMX:Java Management Extensions ,即 Java 管理擴充套件 , 是一個為應用程式、裝置、系統等植入管理功能的框架。 JMX 可以跨越一系列異構作業系統平臺、系統體系結構和 網路傳輸協議,靈活的開發無縫整合的系統、網路和服務管理應用 。而Visual VM是通過 JMX 來和遠端 Java 應用聯絡的 )。

7. T omcat中配置

  下面我們為54 伺服器的 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 進行了一個長時間的加壓,在加壓過程中重點關注了系統資源的使用情況。

三.參考部落格