1. 程式人生 > >JVM學習--jvm監控和故障處理工具

JVM學習--jvm監控和故障處理工具

space 統計信息 狀態信息 ron 事件 host out 進程id mon

java虛擬機性能監控常用命令

Sun JDK監控和故障處理命令有jps、jstat、jinfo、jmap、jhat、jstack 。

1.jps

jps:JVM Process Status Tool,顯示指定系統內所有的HotSpot虛擬機進程。

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

option參數:
-l : 輸出主類全名或jar路徑
-q : 只輸出LVMID
-m : 輸出JVM啟動時傳遞給main()的參數
-v : 輸出JVM啟動時顯示指定的JVM參數

其中[option]、[hostid]參數也可以不寫。

常使用用命令如下:

jps -l -m 顯示系統中虛擬機進程pid號與啟動的main參數等信息

技術分享圖片

2.jstat

jstat(JVM statistics Monitoring)是用於監視虛擬機運行時狀態信息的命令,它可以顯示出虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據

jstat命令格式:

jstat [option] LVMID [interval] [count]

參數:
[option] : 操作參數
LVMID : 本地虛擬機進程ID
[interval] : 連續輸出的時間間隔
[count] : 連續輸出的次數

  option 參數總覽

Option參數說明
class class loader的行為統計。Statistics on the behavior of the class loader.
compiler HotSpt JIT編譯器行為統計。Statistics of the behavior of the HotSpot Just-in-Time compiler.
gc 垃圾回收堆的行為統計。Statistics of the behavior of the garbage collected heap.
gccapacity 各個垃圾回收代容量(young,old,perm)和他們相應的空間統計。Statistics of the capacities of the generations and their corresponding spaces.
gcutil 垃圾回收統計概述。Summary of garbage collection statistics.
gccause 垃圾收集統計概述(同-gcutil),附加最近兩次垃圾回收事件的原因。Summary of garbage collection statistics (same as -gcutil), with the cause of the last and
gcnew 新生代行為統計。Statistics of the behavior of the new generation.
gcnewcapacity 新生代與其相應的內存空間的統計。Statistics of the sizes of the new generations and its corresponding spaces.
gcold 年老代和永生代行為統計。Statistics of the behavior of the old and permanent generations.
gcoldcapacity 年老代行為統計。Statistics of the sizes of the old generation.
gcpermcapacity 永生代行為統計。Statistics of the sizes of the permanent generation.
printcompilation HotSpot編譯方法統計。HotSpot compilation method statistics.

常使用的命令:

jstat -gc (垃圾回收堆的行為統計).如下:

技術分享圖片

C即Capacity 總容量,U即Used 已使用的容量

S0C : survivor0區的總容量
S1C : survivor1區的總容量
S0U : survivor0區已使用的容量
S1C : survivor1區已使用的容量
EC : Eden區的總容量
EU : Eden區已使用的容量
OC : Old區的總容量
OU : Old區已使用的容量
PC 當前perm的容量 (KB)
PU perm的使用 (KB)
YGC : 新生代垃圾回收次數
YGCT : 新生代垃圾回收時間
FGC : 老年代垃圾回收次數
FGCT : 老年代垃圾回收時間
GCT : 垃圾回收總消耗時間

jstat -gc 9628 2000 5 這個命令的意思是每個2秒輸出一次進程號為9628的虛擬機進程的gc信息。如下:

技術分享圖片

3.jmap

jmap(JVM Memory Map)命令用於生成heap dump文件,如果不使用這個命令,還闊以使用-XX:+HeapDumpOnOutOfMemoryError參數來讓虛擬機出現OOM的時候·自動生成dump文件。jmap不僅能生成dump文件,還可以查詢finalize執行隊列、Java堆和永久代的詳細信息,如當前使用率、當前使用的是哪種收集器等。

命令格式:

jmap [option] LVMID

option參數:
dump : 生成堆轉儲快照
finalizerinfo : 顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象
heap : 顯示Java堆詳細信息
histo : 顯示堆中對象的統計信息
permstat : to print permanent generation statistics
F : 當-dump沒有響應時,強制生成dump快照

常使用命令:

jmap -dump:live,format=b,file=dump.hprof vmid,(dump堆到文件,format指定輸出格式,live指明是活著的對象,file指定文件名)如下:

技術分享圖片

jmap -heap vmid (顯示java堆詳細信息,如使用哪種回收器,參數配置,分代情況等),如下:

技術分享圖片

4.jstack

jstack,java堆棧跟蹤工具,用於生成虛擬機當前時刻的線程快照,一般稱為threaddump.線程快照即虛擬機內每一條線程正在執行的方法堆棧的集合。生成線程快照的主要目的是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間等待等。 線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程到底在後臺做什麽事情,或者等待什麽資源。

命令格式
jstack [option] LVMID

option參數
-F : 當正常輸出請求不被響應時,強制輸出線程堆棧
-l : 除堆棧外,顯示關於鎖的附加信息
-m : 如果調用到本地方法的話,可以顯示C/C++的堆棧

常使用命令:

jstack -l LVMID 如下:

技術分享圖片

JVM學習--jvm監控和故障處理工具