1. 程式人生 > >JVM調優之jstack找出最耗cpu的執行緒並定位程式碼

JVM調優之jstack找出最耗cpu的執行緒並定位程式碼

第一步:先找出java的程序Id(PID) 假設java應用名稱是zcg_commodity
ps -ef|grep zcg_commodity
這裡寫圖片描述

得到程序Id為32464

第二步:找出該程序內最消耗CPU的執行緒
top -Hp pid

輸入top -Hp 32464
這裡寫圖片描述

TIME列就是各個java執行緒耗費的CPU的時間,比如圖中是執行緒ID的為2012的執行緒,
通過 printf “%x\n” 2012
得到2012的十六進位制為 7dc

第三步:
一般會進到jdk的bin目錄下,root許可權執行
jstack 32464|grep 7dc

PollIntervalRetrySchedulerThread” prio=10 tid=0x00007f950043e000 nid=0x54ee in Object.wait()
定位問題所在

之前有遇到前幾個消耗CPU的執行緒都是GC的,那可能是短時間記憶體洩露嚴重,導致GC回收不過來,導致CPU短時間飆升
這種情況用jmap -histo:live 32464 |head -20,檢視哪個物件生成異常,就可以定位問題大方向

第四步:
查程式碼