JVM學習--jvm監控和故障處理工具
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監控和故障處理工具