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