Linux下實用的JAVA記憶體洩露監控命令

NO IMAGE

記憶體洩露一直是比較頭疼的事情,下面三個命令我個人覺得相當有用。

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 — 從應用程式啟動到取樣時用於垃圾回收的總時間( 單位秒)