大型互联网项目中,为了保证服务稳定,会引入各种监控和告警。其中CPU和内存的监控可谓重中之重。那么当产生服务器CPU告警后,如何定位原因呢?
首先我们需要通过top列出进程列表,shift+p来按照cpu排序。
可以看到排名第一的是23798这个进程,我们再通过top -Hp 进程号 来查看这个进程下所有的线程情况,同样shift+p来按照cpu排序
排名第一的线程是24037,使用printf '%x\n' 24037 将线程号转为16进制。
通过jstack 进程号 > filename 将进程的堆栈信息输出至文件中,如jstack 23798 > 23798text.txt
再检索这个文件中线程信息,查找相关的代码即可。
如:grep -A30 5de5 23798text.txt