记录:java进程CPU使用过高排查

本文介绍了一种通过top命令查看系统整体状态并排查Java进程CPU占用率过高的方法。具体步骤包括利用top命令按CPU使用率排序,找出占用CPU最高的Java进程,进一步定位问题线程及其TID,并通过jstack命令获取线程堆栈信息进行分析。
摘要由CSDN通过智能技术生成

一、top命令查看整体状态
PS:然后按大写P,CPU使用率会降序排序
有几个注意点

1、load average的三个数值,只有都大于5,基本就有问题
2、排查使用最高的几个java进程

在这里插入图片描述
二、以PID为25412的java进程为例
2.1 查询进程中,那个线程的cpu占用率高,标记TID

# ps -mp 25412 -o THREAD,tid,time
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
root      164   -    - -         -      -     - 9-08:17:08
........
........
root      0.0  19    - futex_    -      - 25686 00:00:02
root     98.2  19    - -         -      - 25687 5-13:37:11
........
........

可以看出来,占用CPU最高子线程的TID为:25687

三、打印25412进程下25687线程的日志

jstack 25412 >>25412cpu.log

换算TID:25687为16进制,结果为: 6457
在线工具:https://tool.lu/hexconvert/

在这里插入图片描述
四、在日志中定位到6457

vim 25412cpu.log

定位到如下图所示:
在这里插入图片描述
五、因为不会java,代码问题只能让谁写的谁自己排查了

但是可能会有死循环,或者休眠不结束进程等原因

六、如果是docker容器的话,步骤为:
6.1 找到容器的ID
6.2 进入到容器内部

docker exec -it 容器ID /bin/bash

6.3 打印日志

jstack PID >PID.log

6.4 换算线程然后排查

参考:https://blog.csdn.net/weixin_43778179/article/details/90147523

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值