JVM性能分析工具jstack介紹
阿新 • • 發佈:2019-01-15
swap cache -h pat The 進程 average destroy 選項
JDK本身提供了很多方便的JVM性能調優監控工具,除了集成式的VisualVM和jConsole外, 還有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一種工具都有其自身的特點, 用戶可以根據你需要檢測的應用或者程序片段的狀況,適當的選擇相應的工具進行檢測, 先通過一個表格形式簡要介紹下這幾個命令的作用和使用方法。本文重點介紹jstack的使用方法。
命令 | 作用 |
---|---|
jps | 基礎工具 |
jstack | 查看某個Java進程內的線程堆棧信息 |
jmap | jmap導出堆內存,然後使用jhat來進行分析 |
jhat | jmap導出堆內存,然後使用jhat來進行分析 |
jstat | JVM統計監測工具 |
hprof | hprof能夠展現CPU使用率,統計堆內存使用情況 |
jps使用
可以列出本機所有java進程的pid
選項
- -q 僅輸出VM標識符,不包括class name,jar name,arguments in main method
- -m 輸出main method的參數
- -l 輸出完全的包名,應用主類名,jar的完全路徑名
- -v 輸出jvm參數
- -V 輸出通過flag文件傳遞到JVM中的參數(.hotspotrc文件或-XX:Flags=所指定的文件
- -Joption 傳遞參數到vm,例如:-J-Xms48m
示例:
1
|
[root@CZT-FS1 board-api]# jps -lvm
|
我們選取PID=67136的Java進程作為後續研究對象。
top使用
除了常用的打印所有進程使用資源外,還可以對單獨的進程,打印線程資源排行榜,按T鍵可對TIME倒序排列, 也就是CPU運行時間。TIME列就是各個Java線程耗費的CPU時間,我們線程pid為67163的線程作為後續線程研究對象
1
|
[root@CZT-FS1 board-api]# top -Hp 67136
|
jstack使用
jstack主要用來查看某個Java進程內的線程堆棧信息。語法格式如下:
1
|
jstack [option] pid
|
參數如下:
- -l long listings,會打印出額外的鎖信息,在發生死鎖時可以用jstack -l pid來觀察鎖持有情況
- -m mixed mode,不僅會輸出Java堆棧信息,還會輸出C/C++堆棧信息(比如Native方法)
1
|
[root@CZT-FS1 board-api]# jstack -l 67136 | more
|
使用printf "%x\n"
,獲得線程ID=的十六進制值。
1
|
[root@CZT-FS1 board-api]# printf "%x\n" 67163
|
查看該線程的堆棧:
1
|
[root@CZT-FS1 board-api]# jstack -l 67136 | grep 1065b -A20 |
JVM性能分析工具jstack介紹