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


版权声明:本文为weixin_37946518原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。