Java 性能調優工具
1、jstack
用法jstack [option] pid
-l long listings,會打印出額外的鎖信息,在發生死鎖時可以用jstack -l pid來觀察鎖持有情況
-m mixed mode,不僅會輸出Java堆棧信息,還會輸出C/C++堆棧信息(比如Native方法)
找出進程內最耗費CPU的線程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid
printf “%x\n” pid 得到pid的十六進制
jstack pid | grep ` printf “%x\n” pid `
要留意下面幾種狀態
死鎖,Deadlock(重點關注)
等待資源,Waiting on condition(重點關注)
? 等待獲取監視器,Waiting on monitor entry(重點關注)
阻塞,Blocked(重點關注)
? 執行中,Runnable
? 暫停,Suspended
? 對象等待中,Object.wait() 或 TIMED_WAITING
? 停止,Parked
2、jmap
jmap pid (64位機器jmap -permstat pid)
jmap -heap pid查看進程堆內存使用情況
jmap -histo[:live] pid查看堆內存中的對象數目、大小統計直方圖,如果帶上live則只統計活對象
jmap -dump:format=b,file=dumpFileName pid 生成dump文件
例如jmap -dump:format=b,file=/tmp/dump.dat 21711
3、jstat
jstat -gc pid 查看gc情況