虛擬機器效能監控和故障處理工具

z1340954953發表於2018-04-20

* 如果監控執行與jdk1.5的虛擬上的程式,程式啟動時候請新增引數"-Dcom.sun.management.jmxremote"開啟JMX管理功能,由於部分工具基於JMX的,但是如果環境在JDK1.6之上,那JMX是預設開啟的

Sun JDK監控和故障處理工具
名稱主要作用
jpsJVM Process Status Tool,顯示指定系統內的所有HotSpot虛擬機器程式
jstatJVM Statistics Monitoring Tool,用於收集HotSpot虛擬機器各方面的執行資料
jinfoConfiguration Info for Java,顯示虛擬機器配置資訊
jmapMemory Map for Java,生成虛擬機器的記憶體轉儲快照(heapdump)檔案
jhatJVM Heap Dump Browser,用於分析heapdump檔案,它會建立一個HTTP/HTML伺服器,讓使用者可以在瀏覽器上檢視分析結果
jstackStack Trace for Java ,顯示虛擬機器的執行緒快照資訊

jps:虛擬機器程式狀況工具

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

hostid: jps可以通過RMI協議查詢開啟了RMI服務的遠端虛擬機器程式狀態。 hostid是RMI登錄檔中註冊的主機名

,在本地上呼叫可以省略

jps options選項
選項作用
-q只輸出LVMID,省略主類的名稱
-m輸出虛擬機器程式啟動時傳遞給主類main()函式的引數
-l    輸出主類的全名,如果程式執行的是Jar包,輸出Jar路徑
-v輸出虛擬機器程式啟動時JVM引數

功能:主要查詢正在執行的虛擬機器程式,並顯示虛擬機器執行主類名稱和這些程式的本地虛擬機器唯一ID(LVMID)


jstat:虛擬機器統計資訊監視工具(顯示本地或遠端類裝載、垃圾收集、記憶體、編譯情況)

命令格式:jstat [option vmid [interval[s|ms] [count]] ]

對於命令格式中的VMID與LVMID需要特別說明一下:如果本地虛擬機器程式,VMID和LVMID是一致的,如果是遠端虛擬機器程式,那麼VMID的格式:

[protocol:][//]lvmid[@hostname[:port]/servername]

引數interval 和 count 表示查詢間隔和次數,如果省略這兩個引數,說明只查詢一次

option 表示使用者查詢的資訊,主要是3類:類裝載、垃圾收集、執行期編譯情況


示例: jstat -gc  2764 250 20 

表示需要每250ms查詢一次程式2764的垃圾收集情況,查詢20次

jstat -gc 內容解讀:



S0C、S1C、S0U、S1U:Survivor 0/1區容量(Capacity)和使用量(Used)
EC、EU:Eden區容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGT:年輕代GC次數和GC耗時
FGC、FGCT:Full GC次數和Full GC耗時
GCT:GC總耗時

Jinfo:Java配置資訊工具

jinfo查詢虛擬機器各項引數配置

命令格式:

jinfo [options] pid 

-v: 查詢虛擬機器啟動時候顯式指定的引數列表

-flag: 查詢未被顯式指定的引數的系統預設值

-sysprops:將虛擬機器程式的System.getProperties()的內容列印

並且,在jdk1.6之後,jinfo在window和Linux平臺上都有提供,並加入了執行期引數可以改的能力

-flag [+|-] name 或者 -flag name = value修改一部分執行期可用的虛擬機器引數

jmap: Java記憶體影響工具

jmap命令用於生成對轉儲快照(一般稱為heapdump或dump檔案)。

如果不適用jmap命令,要想獲取到Java堆轉儲快照,還有些方法:

比如設定虛擬機器引數-XX:+HeapDumpOnOutOfMemoryError引數,通過-XX:HeapDumpOnCtrlBreak引數可以使用[Ctrl]+[Break]鍵來讓虛擬機器生成dump檔案,或者在linux系統下通過kill -3 命令,獲取到dump命令

jmap的作用不僅僅是為了獲取到dump檔案,它還可以查詢finalize執行佇列、java堆和永久代的詳細資訊,如空間使用率、使用的是那種垃圾收集器

命令格式:

jmap  [option] vmid 


示例:先jps獲取到vmid,在使用jmap獲取到dump檔案


jhat: 虛擬機器堆轉儲快照分析工具

和jmap搭配使用分析dump檔案,一般不會直接使用jhat命令分析,第一點,本機上分析耗費資源,第二點,相對於VisualVM等dump檔案分析工具而言比較簡陋

命令格式: jhat dump檔名

jhat內建了一個微型的HTTP/HTML伺服器,螢幕顯示 "Server is ready.",使用者在瀏覽器鍵入http://localhost:7000可以直接檢視



結果預設已包為單位進行顯示,並且分析到記憶體洩露問題會使用到 Show heap histogram 查詢

jstack:Java堆疊跟蹤工具

用於生成虛擬機器當前時刻的執行緒快照(也稱為threaddump或Javacore檔案)。執行緒快照就是當前虛擬機器每一條執行緒正在執行的方法堆疊集合。主要是定位執行緒停頓的原因,如死鎖,死迴圈等。

命令格式: jstack [option] vmid ,vmid是jps命令查詢到的lvmid


另外,java.lang.Thread類新增了一個getAllStackTraces(),可以獲取到執行緒的StackTraceElement物件,完成jstack的大部分功能

HSDIS:JIT生成程式碼反編譯

讓HotSpot的 -XX:+PrintAssembly指令呼叫它動態生成原生程式碼還原為彙編程式碼輸出

jdk的視覺化工具

1. jconsole:java監視和管理控制檯,集合了jps,jstat,jinfo,jstack 的功能

2. visualvm:多合一個故障處理工具

相關文章