JVM調優jstack找出最耗cpu的執行緒&定位問題程式碼

shasiqq發表於2020-11-19

JVM調優jstack找出最耗cpu的執行緒&定位問題程式碼

一、伺服器環境

jdk1.8 有多個tomcat容器執行java程式

二、用到的命令

top、printf、jstack、grep

三、排查過程

  1. 用top查出哪個java程式最消耗cpu命令:top 如下圖
    在這裡插入圖片描述這三個指標可以看出程式PID為87010的程式很消耗資源

  2. 根據程式87010查出哪個執行緒最消耗cpu命令:top -Hp 87010 如下圖 在這裡插入圖片描述通過上圖三個指標可以看出執行緒90255比較消耗資源,TIME列就是各個Java執行緒耗費的CPU時間。

  3. printf “%x\n” 90255 得到一個16進位制的數值 1608f
    4.jstack 87010|grep 1608f,它用來輸出程式90255的堆疊資訊,然後根據執行緒ID的十六進位制值grep,如下:
    在這裡插入圖片描述可以看出是執行緒池ThreadPoolExecutor的問題,ok問題定位到了。


我愛你
為了找你
我搬進了鳥的眼睛裡
我注視著風的方向
卻忘記了獵人的槍響

相關文章