Linux下實用的JAVA內存泄露監控命令及工具

一、Linux 命令

1、jstack (linux下特有)

可以觀察到jvm中當前所有線程的運行情況和線程當前狀態

jstack 2083

輸出內容如下:

2、jmap (linux下特有,也是很常用的一個命令)

觀察運行中的jvm物理內存的佔用情況。

參數如下:

-heap :打印jvm heap的情況
   -histo: 打印jvm heap的直方圖。其輸出信息包括類名,對象數量,對象佔用大小。
   -histo:live : 同上,但是隻答應存活對象的情況
   -permstat: 打印permanent generation heap情況

 jmap -dump:format=b,file=dumpfile.hprof <pid> 

將日誌信息輸出到當前路徑,文件名dumpfile.hprof pid 進程號

MAT 工具:

https://www.cnblogs.com/larack/p/6071209.html

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章