常见定位问题的方式有:
- 日志
- 系统状态
- dump线程
今天用Linux命令一步一步来定位可能出现的问题程序。
1.打开linux terminal工具,敲入“top”命令如下图出现系统资源的占用情况
展示的信息太多、这里只看每个进程的cup性能信息:可能会出现3种情况。
- ·第一种情况,某个线程CPU利用率一直100%,则说明是这个线程有可能有死循环。
- ·第二种情况,某个线程一直在TOP 10的位置,这说明这个线程可能有性能问题(根据命令排序)。
- ·第三种情况,CPU利用率高的几个线程在不停变化,说明并不是由某一个线程导致CPU 偏高。
方案
注意:如果是第一种情况,也有可能是GC造成,可以用jstat命令看一下GC情况,看看是不是因
为持久代或年老代满了,产生Full GC,导致CPU利用率持续飙高。
已经定位高cpu的PID了。
1.根据PID找到耗时高cpu的线程id,命令如下(还可把线程dump下来也可以)
ps -mp pid -o THREAD,tid,time
2.拿到 tid(线程id),这里是10进制的,要转换成16进制的
printf "%x\n" 线程id
3.拿到线程id,打印线程的堆栈信息,找到出现问题的代码,命令:
jstack pid |grep tid -A 30
有的在实验楼敲过,打完收工-累。
来源:CSDN
作者:TangDB。
链接:https://blog.csdn.net/iccolor2014/article/details/104674644