【面试】线上 CPU 100% 问题排查

回答套路一般为:线上服务器没有排查过,线上服务器只有运维才有操作权限。在平时开发的时候,在测试服务器上排查过。

一、复现代码

public class Test 
{
    public static void main( String[] args )
    {
        int a = 0;
        while (a < 100) {
            a *= 10;
        }
    }
}

二、将代码打包成 jar 包,上传到服务并运行

2.1、将代码打包成 jar 包

参考: 点我

2.2、传到服务并运行

运行好的效果如下
【面试】线上 CPU 100% 问题排查_第1张图片

三、拿到让 cpu 100% 的进程 id、线程 id

3.1、拿到进程 id

通过 top 命令,就可以看到让 cpu 100% 的进程 id,pid 就是进程id
【面试】线上 CPU 100% 问题排查_第2张图片

3.2、拿到让 cpu 100% 的线程 id

使用 top -Hp 进程id ,拿到让 cpu 100% 的线程 id
【面试】线上 CPU 100% 问题排查_第3张图片

四、导出对应快照(用来分析问题)

jstack -l 进程id > ./进程id.stack

【面试】线上 CPU 100% 问题排查_第4张图片
找到生成的快照,使用 more / less 命令查看快照内容,在快照内容里搜索线程 id 的十六进制,找到问题代码。
【面试】线上 CPU 100% 问题排查_第5张图片

五、最后

强烈建议,自己实际操作一遍,加深印象。

你可能感兴趣的:(Java基础,面试,java,cpu,100)