线上 CPU100% 排查方案

问题:生产服务器上部署了几个java程序,忽然出现了CPU100%的异常告警,你如何定位出问题呢?html

下面给出两种系统下的排查步骤,都是如出一辙的,只是命令稍有区别!java

  • 查消耗cpu最高的进程PID服务器

  • 根据PID查出消耗cpu最高的线程号spa

  • 根据线程号查出对应的java线程,进行处理。线程

准备一行死循环代码:code

    public class run (){
        public static void main (String args[]){
        int count = 0;
        while (count < 1) {
            count = count * 10;
        }

    }

怎么跑,应该不用我说了,直接教你们怎么查!htm

Linux版

Linux版本,步骤是如出一辙的,就是命令换了一下blog

查消耗cpu最高的进程PID

执行命令排序

  • 执行top -c ,显示进程运行信息列表。按下P,进程按照cpu使用率排序进程

以下图所示,PID为3033的进程耗费cpu最高

根据PID查出消耗cpu最高的线程号

执行命令

  • top -Hp 3033 ,显示一个进程的线程运行信息列表。按下P,进程按照cpu使用率排序

以下图所示,PID为3034的线程耗费cpu最高

 这是十进制的数据,转成十六进制为0xbda

根据线程号查出对应的java线程,进行处理

执行命令,导出进程快照

jstack -l 3033 > ./3033.stack

而后执行,grep命令,看线程0xbda作了什么

cat 3033.stack |grep 'bda' -C 8

输出以下

 至此定位到问题

本博文来源于:http://www.javashuo.com/article/p-brquoafh-cn.html

相关文章
相关标签/搜索