tomcat cpu佔用過高

第一步: 使用top -c 命令查看哪個進程佔用cpu

這裏看到佔用cpu的進程爲20067

第二步:使用top -H -p 20067(進程ID) 查看佔用cpu的線程

第三步:把列表中的佔用高的線程pid轉化成16進制

$ printf "%x\n" 26493(線程ID)

第四步:利用jstack 命令搜索線程信息

$ jstack -l 20067(進程ID) > dump.txt

$ vim dump.txt

在vim 中搜索26493(線程ID)的十六進制數字

重點查這麼幾類情況:
1)wait on monitor entry: 被阻塞的,肯定有問題

2)runnable : 注意IO線程

3)in Object.wait(): 注意非線程池等待

最後注意看runnable的GC任務線程

附加:

Online Java Thread Dump Analyzer - 在線線程日誌分析工具

http://spotify.github.io/threaddump-analyzer/#thread-0x00007fae98001800

 

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f2f2401d800 nid=0x6645 runnable

$ jstat -gcutil 91782 5s

查詢Eden和Old是否始終都佔滿,是否頻繁進行YGC,是否頻繁FGC

https://blog.csdn.net/zouheliang/article/details/80537571

https://www.jianshu.com/p/f92c190f7dec

https://my.oschina.net/zhangxufeng/blog/1613808

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章