記憶體泄露一直是比較頭疼的事情,下面三個命令我個人覺得相當有用。
1、jstack (linux下特有)
可以觀察到jvm中當前所有線程的運行情況和線程目前狀態
jstack 2083
輸出內容如下:
2、jmap (linux下特有,也是很常用的一個命令)
觀察運行中的jvm實體記憶體的佔用情況。
參數如下:
-heap :列印jvm heap的情況
-histo: 列印jvm heap的長條圖。其輸出資訊包括類名,對象數量,對象佔用大小。
-histo:live : 同上,但是只答應存活對象的情況
-permstat: 列印permanent generation heap情況
3、jstat
這是jdk命令中比較重要,也是相當實用的一個命令,可以觀察到classloader,compiler,gc相關資訊
具體參數如下:
-class:統計class loader行為資訊
-compile:統計編譯行為資訊
-gc:統計jdk gc時heap資訊
-gccapacity:統計不同的generations(不知道怎麼翻譯好,包括新生區,老年區,permanent區)相應的heap容量情況
-gccause:統計gc的情況,(同-gcutil)和引起gc的事件
-gcnew:統計gc時,新生代的情況
-gcnewcapacity:統計gc時,新生代heap容量
-gcold:統計gc時,老年區的情況
-gcoldcapacity:統計gc時,老年區heap容量
-gcpermcapacity:統計gc時,permanent區heap容量
-gcutil:統計gc時,heap情況
-printcompilation:不知道幹什麼的,一直沒用過。
一般比較常用的幾個參數是:
jstat -class 2083 1000 10 (每隔1秒監控一次,一共做10次)
參數解釋:
Options — 選項,我們一般使用 -gcutil 查看gc 情況
vmid — VM 的進程號,即當前啟動並執行java 進程號
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 — 從應用程式啟動到採樣時用於記憶體回收的總時間( 單位秒)