线上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%问题快速定位的主要内容,如果未能解决你的问题,请参考以下文章

CPU100%问题快速定位思路

CPU100%,怎么快速定位?

CPU100%,怎么快速定位?

Java服务,CPU100%问题如何快速定位?

线上问题定位--CPU100%

线上服务 CPU 100%?一键定位 so easy!