1. 程式人生 > 其它 >JVM監控工具之jvisualvm

JVM監控工具之jvisualvm

一、簡介

JVisualVM是Netbeans的profile子專案,已在JDK6.0 update 7 中自帶(bin/jvisualvm.exe),能夠監控執行緒,記憶體情況,檢視方法的CPU時間和記憶體中的物件,已被GC的物件,反向檢視分配的堆疊(如100個String物件分別由哪幾個物件分配出來的)。

二、配置

通過JVisualVM遠端連線伺服器監控JVM,需要在被監控的伺服器上tomcat的啟動檔案catalina.sh中加入以下配置:

 JAVA_OPTS="-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.182.130 -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 

JMX的相關引數:

引數名 型別 描述
-Dcom.sun.management.jmxremote 布林 是否支援遠端JMX訪問,預設true
-Dcom.sun.management.jmxremote.port 數值 監聽埠號,方便遠端訪問
-Dcom.sun.management.jmxremote.authenticate 布林 是否需要開啟使用者認證,預設開啟
-Dcom.sun.management.jmxremote.ssl 布林 是否對連線開啟SSL加密,預設開啟
-Dcom.sun.management.jmxremote.access.file 路徑 對訪問使用者的許可權授權的檔案的路徑,預設路徑JRE_HOME/lib/management/jmxremote.access
-Dcom.sun.management.jmxremote. password.file 路徑 設定訪問使用者的使用者名稱和密碼,預設路徑JRE_HOME/lib/management/ jmxremote.password

三、連線

四、模組介紹

1、概述

概述介面,主要顯示JVM的資訊,包括JVM引數以及系統屬性等

2、監視

(1)按鈕“執行垃圾回收”可通知JVM執行Full GC

(2)按鈕“堆Dump”可生成堆記憶體快照,下面詳細講解堆Dump的使用

2.1、堆dump

  2.1.1、概要

       首先生成堆記憶體快照

     

        把檔案下載到本地後使用JVisualVM開啟,如下圖:

     

    (1)紅框標註的箭頭處,可以憑你的點選順序切換前後視窗

    (2)查詢最大的物件,個數可自行定製;

    (3)點選“顯示執行緒”可以顯示執行緒細節,如下所示:

        

      (1)timed_waiting和runnable表示執行緒執行狀態

    (2)daemon表示這個執行緒是守護執行緒,如沒有標記daemon則表示它是一個使用者執行緒,如main執行緒

    (3)prio表示該執行緒的優先順序,在java執行緒中數字越大優先順序越高,取值在1至10之間,預設為5

    (4)點選被標註成藍色的相關類,可以在類例項數介面檢視細節

  2.1.2、例項數

  

  (1)右上角的三個按鈕可以對介面進行定製

  (2)點選“計算保留大小”可計算每個field的保留尺寸,簡言之就是它所佔的byte值

  (3)右下角紅框處標記出了,不同的圖形代表不同的角色

  2.1.3、類

  

  (1)左下角可以通過過濾器來過濾顯示檢視

  (2)右擊某個類可以讓其在例項介面顯示,檢視其細節

  (3)點選右上角紅框處可以與另一個記憶體快照進行比較,在比較檢視中可以看出每個類的增加和減少的情況

  2.1.4、QQL控制檯

  

  (1)選中具體的Query例項,點選開啟,再點選執行就可以進行查詢了,儲存按鈕可以儲存你的query語句

  (2)比較實用的是PermGen分析語句

3、執行緒

(1)執行緒的顏色從綠、紫、黃、褐、橙,分別代表執行、休眠、等待、駐留和死鎖

(2)點選執行緒Dump即可生成執行緒快照,其功能跟監視裡面堆dump生成的heapdump檔案裡面的顯示執行緒類似,如下圖:

4、抽樣器

4.1、抽樣器簡介:

  (1)通過“設定”可以對CPU的取樣來源以及記憶體的重新整理時間進行設定

  (2)點選CPU或者記憶體即可開始監控,點選Stop則停止取樣

4.2、CPU

4.2.1、CPU樣例

(1)點選執行緒Dump可生成執行緒快照

(2)點選快照可生成執行緒的快照,快照裡面包含了所有執行緒的呼叫樹以及其熱點編譯情況,如下圖所示:

4.2.2、執行緒CPU時間

(1)點選增量按鈕後,可記錄執行緒的變化,功能有點類似JProfilter的“Mark Current Values”。

4.3、記憶體

4.3.1、堆柱狀圖

 功能與前面介紹過的類似

4.3.2、每個執行緒分配

 功能與前面介紹過的類似