回答套路一般为:线上服务器没有排查过,线上服务器只有运维才有操作权限。在平时开发的时候,在测试服务器上排查过。
一、复现代码
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 的十六进制,找到问题代码。
五、最后
强烈建议,自己实际操作一遍,加深印象。