1、 top 看看哪个进程是罪魁祸首
jstack 排查 java 进程占用大量 CPU 问题_其他

2、将这个进程的jstack dump 到一个文件里面,以备使用。

jstack -l 25886 > /tmp/jstack.log
# 如果报错,则加 -F 命令强制执行。
jstack -F 25886 > /tmp/jstack.log

使用 sftp 弄到本地。

3、查看这个进程里面哪些子进程, 按 P 键排序占用 CPU 的子进程

top -H -p 25886 (top得到的进程号)
# 这里得到的子进程id 为 26017,把该值转化为十六进制

echo 26017 |awk '{printf("%x\n",$0)}'
# 得到
65a1

4、在 jstack.log 中搜索 65a1
jstack 排查 java 进程占用大量 CPU 问题_搜索_02

============================

top -H -p 25886 (top得到的进程号)
# 这里得到的子进程id 为 26017,把该值转化为十六进制

printf "%x" 26017
# 得到
65a1

jstack 26017 | grep 65a1

通过 jmap 找到最耗内存的对象

方法:

jmap -histo:live 25886 | more