JAVA 进程CPU过高排查

1. top命令看一下JAVA进程:

JAVA 进程CPU过高排查_第1张图片

 占用500%多,非常恐怖,程序卡得动不了了。

2. 使用命令top -H -p PID 此处PID就是上一步获取的进程PID,我的PID是13342,通过此命令可以查看实际占用CPU最高的的线程的ID,此处几位TID

JAVA 进程CPU过高排查_第2张图片

3.获取对应线程的线程栈信息

  • 使用命令printf "%x\n" tid,将线程ID转换为16进制

printf "%x\n" 13345

 

 使用命令jstack PID(进程pid) |grep tid(线程pid16进制) -A 50,此处tid为上一步转换后的16进制,使用此命令可以查看到对应线程的线程栈信息,从对根据线程栈对对应的代码进行分析

jstack 13342|grep 3421 -A 50  看到异常信息:

JAVA 进程CPU过高排查_第3张图片

或者将近信息直接输到根目录的这个文件下面:

jstack -l 13342 >> jstackLog.out

使用 命令打开文件查看异常信息:

more jstackLog.out

可以按回车往下滚动

可以看到错误类信息:

JAVA 进程CPU过高排查_第4张图片

 最后就是代码上优化了,我这边是导出数据太大,循环创建对象导致的错误。

你可能感兴趣的:(jvm)