线上cpu100%问题快速定位
Posted 逆风天堂886
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线上cpu100%问题快速定位相关的知识,希望对你有一定的参考价值。
问题描述:服务器上部署了多个tomcat,即垂直切分的Web站点,记忆多个Java微服务,突然收到运维的cpu异常告警。
步骤一:找到最耗cpu的进程
工具:top
方法:
执行top -c,显示进程运行信息列表
键入P(大写),进程按cpu使用率排序
图示:
如上图,找到最耗CPU的进程PID20136
步骤二: 找到最耗CPU的线程
工具:top
方法:
top -Hp 20136,显示一个进程的线程信息列表
键入P,线程按CPU使用率排序
由此找到最耗CPU的线程PID
步骤三:将线程PID转化为16进制:
工具:printf
方法:printf "%x\\n" 10804
如图,转化为16进制0x2a58
之所以要转换为16进制,是因为堆栈里,线程id是用16进制表示的。
步骤四:查看堆栈,找到线程在干嘛:
工具:pstack/jstack/grep
方法:jstack 20136 | grep \'0x2a34\' -C5 -color
打印进程堆栈
通过线程id,过滤得到线程堆栈
以上是关于线上cpu100%问题快速定位的主要内容,如果未能解决你的问题,请参考以下文章