欢迎光临
我们一直在努力

JAVA进程占用CPU高不释放问题排查

近期在项目使用过程中,出现JAVA进程占用CPU99.99%,且长期不释放,导致Linux系统的load average始终处于13以上,导致服务器严重超载。

排查思路如下:

1、通过top命令定位占用高的JAVA进程。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31224 cc 20 0 7955068 874288 17528 S 301.0 2.7 222:41.88 java

2、通过ps aux | grep PID 命令查看哪个模块占用,再根据此模块定位问题原因

3、通过下面命令获取线程信息,并找到占用CPU高的线程,其中,pid修改为通过1查询到的pid,并分析出占用CPU比较高的TID

ps -mp pid -o THREAD,tid,time | sort -rn 

4、打印线程堆栈信息前,需要将TID转换为16进制

printf "%x\n" tid

5、最后打印线程的堆栈信息,其中pid和tid根据上面获取的信息填写,pid为10进制,tid为16进制

jstack pid |grep tid -A 30

最后即可根据堆栈信息分析问题原因。如果出现显示不出来或者报pid异常,则有可能是权限的问题,需要切换到java模块启动的用户下再使用该命令

赞(3)
未经允许不得转载:Redith聊产品和技术 » JAVA进程占用CPU高不释放问题排查
分享到: 更多 (0)

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    喜欢,解决困扰我很久的问题

    海子 2周前 (01-10) 来自天朝的朋友 QQ浏览器  ALP-AL00 Build/HUAWEIALP-AL00 回复