线上CPU过高排查

记录工作点滴。

环境linux。

1.模拟问题重现

/**
 * linux中写一个Test.java
 */
public class Test {
    public static void main(String[] args) {
        int a = 0;
        while (true) {
            a = a * 10;
        }
    }
}

#linux 中编译,运行该类
>javac Test.java
>java Test

在这里插入图片描述

2.查消耗cpu最高的进程PID

>top -c #显示整个命令行而不只是显示命令名 ,查找消耗CPU较大的进程PID
#查询结果如下图,PID=23209的进程消耗CPU最多

在这里插入图片描述

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

>top -Hp 23209 ,显示一个进程的线程运行信息列表。按下P,进程按照cpu使用率排序
#查询结果如下图,PID=23210的线程消耗CPU最多

在这里插入图片描述

4.十进制线程号转为十六进制

网上随便找一个在线的“十进制线程号转为十六进制” ,转换结果如下图,23210转为16进制是5aaa

在这里插入图片描述

5.执行命令,导出进程快照

>jstack -l 23209 > 23209.stack
然后执行,grep命令,看线程5aaa做了什么

>cat 23209.stack |grep '5aaa' 
最终结果如下图,可以看到定位出Test.java文件的第五行有问题

在这里插入图片描述

6.根据提示修改代码

>vim Test.java #进入编辑
>set nu #显示行号

如果是系统程序部署到linux中,在idea中快捷键shift + shift 定位类名,ctrl + g定位出行号

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页