1. 程式人生 > >JVM監控工具詳解

JVM監控工具詳解

企業級應用開發中經常會遇到以下問題,可以使用工具對JVM進行監管,以便及時查詢問題所在。
  記憶體不足OutOfMemory(大物件沒有gc等),記憶體洩露;
  執行緒死鎖,執行緒數過多;
  鎖爭用(Lock Contention),資源未及時釋放(資料庫);
  Java程序CPU消耗過高.

一、Java自帶工具

  Java安裝目錄的bin檔案加下有一些工具可以用來監控JVM效能,如jconsole、jvisualvm、jmap、jps、jstack、jhat、jstat、jinfo等。

1.   jconsole

  jconsole可以監控Java應用程式(如jar應用、tomcat等),但被監視的應用程式必須和jconsole是用同一個使用者執行的。jvisualvm的使用和jconsole類似。

  • 本地監控:  jconsole  pid 
  • 遠端監控:  jconsole  [ hostname:portNum ]      

      使用遠端監控需要配置jmx代理資訊,修改Tomcat的bin目錄下的catalina.bat。

set JAVA_OPTS= %JAVA_OPTS% -Djava.rmi.server.hostname=HostIP
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.port=8888
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false

  連線成功後可以在overview中檢視記憶體、執行緒、類及CPU使用情況:

      

2.  probe

  Lambda Probe 是基於 Web + AJAX 的強大的免費開源工具,可以用來實時管理一個單獨的host。LambdaProbe擁有幾乎所有Tomcat Manager的功能,還包括應用程式、資料來源、釋出、日誌、執行緒、叢集、系統資訊、狀態、聯結器狀態這些功能,並能顯示 Server 的詳細記憶體佔用狀態。

  probe war包下載

3.   jmap

   列印java程序的堆記憶體資訊。

  • jmap -heap pid         檢視heap的概要資訊,GC使用的演算法、heap的配置及wise heap的使用情況.
  • jmap -histo[:live] pid     檢視堆記憶體中的每個類的類名、例項數量、記憶體佔用大小
  • jmap -dump:live, format=b, file=fileName pid       將記憶體使用情況匯出到檔案中,再用jhat、MAT、VisualVM分析檢視,以便查詢記憶體溢位原因

4. jhat

  jhat可以對JVM中匯出的檔案進行分析,使用命令 jhat fileName 即可以在瀏覽器中輸入http://localhost:7000檢視記憶體資訊。如果Dump檔案太大需要加上-J-Xmx512m指定最大堆記憶體,如 jhat -J-Xmx512m [-port 9998] tmp.bin

  分析記憶體還可以使用Eclipse的Memory Analyzer,外掛地址http://download.eclipse.org/releases/juno,找到General Purpose Tools底下的Memory Analyzer並安裝。

5. jstat

  檢視classloader,compiler,gc相關資訊,實時監控資源和效能 。jstat工具特別強大,可以用來監視VM記憶體內的各種堆和非堆的大小及其記憶體使用量。

語法結構:

       jstat -<option> [-t] [-h<lines>] <pid> [<interval> [<count>]]

Options — 通常使用 -gcutil 檢視gc情況
interval – 間隔時間,單位為秒或者毫秒
count — 列印次數,如果預設則列印無數次

結果說明:

S0     — Heap上的 Survivor space 0 區已使用空間的百分比
S1     — Heap上的 Survivor space 1 區已使用空間的百分比
E       — Heap上的 Eden space 區已使用空間的百分比
O      — Heap上的 Old space 區已使用空間的百分比
P       — Perm space 區已使用空間的百分比
YGC  — 從應用程式啟動到取樣時發生 Young GC 的次數
YGCT— 從應用程式啟動到取樣時 Young GC 所用的時間(單位秒)
FGC  — 從應用程式啟動到取樣時發生 Full GC 的次數
FGCT— 從應用程式啟動到取樣時 Full GC 所用的時間(單位秒)
GCT  — 從應用程式啟動到取樣時用於垃圾回收的總時間(單位秒)

  • jstat –class<pid> :          顯示載入class的數量,及所佔空間等資訊。
  • jstat -compiler <pid>:    顯示VM實時編譯的數量等資訊。
  • jstat -gc <pid>:              顯示gc的資訊,檢視gc的次數,及時間。
  • jstat -gccapacity <pid>: 顯示VM記憶體中三代(young,old,perm)物件的使用和佔用大小
  • jstat -gcutil <pid>:         統計gc資訊
  • jstat -gcnew / gcnewcapacity<pid>: 年輕代物件的資訊(及其佔用量)。
  • jstat -gcold / gcoldcapacity <pid> :old代物件的資訊(及其佔用量)。
  • jstat -gcpermcapacity  <pid>:            perm物件的資訊及其佔用量。
  • jstat -printcompilation <pid>:            當前VM執行的資訊。

6. jstack

  jstack用於生成java虛擬機器當前時刻的執行緒快照,主要目的是定位執行緒出現長時間停頓的原因,如執行緒間死鎖、死迴圈、請求外部資源導致的長時間等待等。

語法:  jstack [ option ] pid

    -F 當 jstack [-l] pid 沒有響應的時候強制列印棧資訊

    -l 長列表. 列印關於鎖的附加資訊,例如屬於java.util.concurrent的ownable synchronizers列表.

 

 

jstack應用一:  JVM調優之jstack找出最耗cpu的執行緒並定位程式碼

jstack應用二:  三個例項演示 Java Thread Dump 日誌分析

7. jps

用來檢視基於HotSpot JVM裡面所有程序的具體狀態, 包括程序ID,程序啟動的路徑等等。

      命令格式:jps [options ] [ hostid ] 

[options]選項 :
-q: 輸出VM識別符號pid
-m:輸出main method的引數 
-l:  輸出完全的包名,應用主類名,jar的完全路徑名 
-v: 輸出jvm引數 
-V: 輸出通過flag檔案傳遞到JVM中的引數
-Joption:傳遞引數到vm,例如:-J-Xms512m

        [hostid]:[protocol:][[//]hostname][:port][/servername]

轉自:https://www.cnblogs.com/anxiao/p/6796644.html?utm_source=itdadao&utm_medium=referral