文章目录
  1. 1. 初步分析原因
  2. 2. 找进程
  3. 3. 定位线程
  4. 4. 分析堆栈
  5. 5. 其他辅助命令

初步分析原因

什么原因会导致cpu占用率居高不下,如果用户数没有出现井喷式暴增的话,最可能的情况就是代码bug导致出现死循环

找进程

使用top命令找到cpu使用率高的jvm进程

定位线程

使用如下命令定位到问题线程

1
ps -mp [进程号] -o THREAD,tid,time

找到cpu占用率高的线程,可能不止一个,找到最高的那个

分析堆栈

将上步找到的线程id转换为16进制

1
printf "%x\n" tid

打印堆栈信息,分析原因

1
jstack pid |grep tid -A 30

其他辅助命令

在排除过程中可能需要查看进程内存情况,可以使用如下命令(每2s一条,显示10条):

1
jstat -gcutil pid 2000 10

还可以把堆栈信息导出,使用专业的分析软件进行分析:

1
jstack pid >>jstack.out
文章目录
  1. 1. 初步分析原因
  2. 2. 找进程
  3. 3. 定位线程
  4. 4. 分析堆栈
  5. 5. 其他辅助命令