模拟死循环代码
在服务器中编译执行此段代码
import java.util.Random;
public class circle{
public static void main(String[] args) {
while (true){
System.out.println(new Random(999999));
}
}
}
此时,代码运行起来,服务器较卡,CPU占用过高
分析问题步骤和定位
1.先用top命令找出CPU占比最高的

2.ps -ef 或者jps进一步定位,得知是一个怎么样的一个后台程序给我们惹事
这里执行:
ps -ef|grep java|grep -v grep
其中grep -v grep是为了去除包含grep的进程行 ,避免影响最终数据的正确性 。结果:

3.定位到具体线程或者代码
指令公司如下:
ps -mp 进程 -o THREAD, tid, time
其中
-m 显示所有的线程
-p pid 表示进程使用CPU的时间
-o 该参数后是用户自定义格式
执行:
ps -mp 9059 -o THREAD,tid,time

4.将需要的线程ID转换为16进制格式(英文小写格式)(定位到代码的哪一行)
printf "%x\n" 9060

5.jstack进程ID|grep tid (16进制线程ID小写英文)-A60(打印出前60行)
jstack 进程id | grep tid(16进制线程id小写英文)-A60 执行:
jstack 9059 | grep 2364 -A60
