1、java定位进程java
在服务器中终端输入命令:top服务器
能够看到进程ID,为5421的cpu这列100多了。spa
记下这个数字:5421线程
而后在服务器中终端输入命令:top -Hp 5421blog
做用是查看里程内部线程资源占用状况。5421为第二步获取到的进程id进程
能够看到第一行cpu占用特别高,就是它了。记住,此时第一列PID是线程ID:5463资源
注意这个ID是十进制,可是java线程堆栈是采用是16进制。那么咱们转换一下。循环
printf "%x\n" 5463终端
输出结果:grep
1557
如今咱们须要用到以前的进程ID(5421)和线程的16进制数字(1557)。
在服务器中终端输入命令:jstack -l 5421|grep 1557 -C 8
可看到线程处于运行状态,代码在BugDemoController类的17行,也就是咱们的循环所在行。
这里解释一下grep后页-C 8意思是显示查找目标行的先后8行,不加的话就只有一行,可能一时看不出问题来。
固然你也能够更改一下:
-A 8后8行
-B 8前8行
PS:本例方法也可用于排查线上死锁问题。