假如生产环境cpu占用过高,谈谈你的分析思路和定位?

步骤:
我们提前部署了一个死循环的javaDemo程序,跑在linux上。

1. 先用top命令找出占用cpu最高的进程号

可以发现进程号是5101的java进程:

shell脚本查找出java进程的id linux 查找java进程_java


2. ps -ef或者jps进一步定位

得知是怎样一个后台程序给我们惹事。可以发现是我们正在运行的java demo程序:

  • jps -l 列出所有进程:
  • ps -ef|grep java|grep -v grep

3 .定位到具体的线程或者代码!!!!!
使用如下命令:
ps -mp 5101 -o THREAD,tid,time
参数解释:

  • -m :显示所有线程
  • -p pid :进程使用的cpu时间
  • -o :该参数后使用户自定义格式

    可发现,线程号5102的线程,cpu占用最高,达到35.6%,有问题。

4.将需要的线程id转换为16进制格式(小写)
将线程号 5102,转换为16进制数字 :13ee;

5.jstack 进程id | grep tid(16进制线程id,小写英文) -A60
jstack 5101 | grep 13ee -A60
参数说明

  • -A60 打印前60行

shell脚本查找出java进程的id linux 查找java进程_死循环_02


可以发现,是第10行代码有问题。

到此就找到了出问题的代码。