回答套路一般为:线上服务器没有排查过,线上服务器只有运维才有操作权限。在平时开发的时候,在测试服务器上排查过。
一、复现代码
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% 的进程 id、线程 id
3.1、拿到进程 id
通过 top 命令,就可以看到让 cpu 100% 的进程 id,pid 就是进程id
3.2、拿到让 cpu 100% 的线程 id
使用 top -Hp 进程id
命令,拿到让 cpu 100% 的线程 id
四、导出对应快照(用来分析问题)
jstack -l 进程id > ./进程id.stack
找到生成的快照,使用 more / less 命令查看快照内容,在快照内容里搜索线程 id 的十六进制,找到问题代码。
五、建议
强烈建议,自己实际操作一遍,加深印象。
六、最后
我是 xiucai,一位后端开发工程师。
如果你对我感兴趣,请移步我的个人网站,进一步了解。
- 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
- 本文首发于个人博客(超链接),未经许可禁止转载💌