Linux线上问题定位

早过忘川 提交于 2020-03-06 05:04:14

常见定位问题的方式有:

  • 日志
  • 系统状态
  • 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

有的在实验楼敲过,打完收工-累。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!