【面试】线上 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、传到服务并运行

运行好的效果如下

image-20230905195627714

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

3.1、拿到进程 id

通过 top 命令,就可以看到让 cpu 100% 的进程 id,pid 就是进程id
image-20230905195800410

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

使用 top -Hp 进程id 命令,拿到让 cpu 100% 的线程 id
image-20230905195746270

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

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

image-20230905200925319

找到生成的快照,使用 more / less 命令查看快照内容,在快照内容里搜索线程 id 的十六进制,找到问题代码。
image-20230905200946933

五、建议

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

六、最后

我是 xiucai,一位后端开发工程师。

如果你对我感兴趣,请移步我的个人网站,进一步了解。

  • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
  • 本文首发于个人博客(超链接),未经许可禁止转载💌

文章作者: xiucai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xiucai !
  目录