今天运维反馈,我们线上一个web项目,CPU负载非常高,导致其他项目都快不正常了,查看线上的cpu负载,看到cpu竟然被这个进程占用了800%以上,着实惊人。
当时的CPU负载图:
而正常状态下应该是:
运维在服务器top查询的结果如下图所示:
怎么回事呢?内存占用并不高,所以排除是内存漏洞或gc等问题,最有可能的原因,就是代码上有死循环。于是试着看代码。
看了半天后,并没有发现有死循环的情况。竟然CPU看到该进程占用如此多的资源,那能否看到某个线程的使用情况呢?运维把内存dump下来以后,的确看到一些运行的线程,但看不出什么名目来。网上发现一篇好文章,《tomcat7高CPU问题》。
原文就不赘述了,这里只引用其关键部分:
第一步,使