Java 程序 CPU 占用高问题排查

8 篇文章 1 订阅
8 篇文章 0 订阅

背景

有时候部署在 Linux 上的 Java 程序占用的 CPU 会突然飙高,然后会持续一段时间。此时就需要找到是什么原因导致的 CPU 高,然后解决它。大致过程是:找出占用 CPU 较高的线程PID --〉输出 Java 程序线程堆栈信息 --〉转换占用 CPU 高线程 PID 为 16 进制,在堆栈信息中找到相应的线程堆栈 --〉优化对应的线程。

详细步骤

1、查找占用 CPU 高的线程

先用 top 命令找出占用 CPU 百分比较高的 Java 进程 PID,然后再使用下面命令输出该进程下所有线程CPU、内存等信息。

top -H -p PID

从输出的信息中找到占 CPU 较高的线程 PID,然后转换为 16 进制,例如:256 --> 0x100

2、输出 Java 程序线程堆栈信息

使用 jstack 命令输出线程堆栈信息到一个文件中。

jstack -l PID(进程PID) > app.stack
3、找到对于的线程栈信息

在 app.stack 文件中搜索 nid=0x100 的线程,这个线程的状态是 RUNNAble,一般情况下是我们自己写的业务代码程序。

4、优化代码程序

知道了那段代码引起的 CPU 飙高,根据具体情况作出相应调整。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值