JAVA进程cpu非常高(400%)

JAVA进程cpu非常高(400%)

一:起因

一直收到报警说cpu过高,去服务器上执行 top命令发现
在这里插入图片描述

纳尼 400% cpu那么高 为啥封顶不是100% 是因为一个cpu核算一个100%

芭比Q了

之前都是听别人解决过,自己还没解决过。一步一步来吧。

二:解决办法

2.1:尝试dump堆文件(结果太慢)

通过top 查看使用率最高的进程
在这里插入图片描述

然后像一个老手一样 去dump堆文件 jmap -dump:live,file=heap.bin 16742

16742是我的进程id

发现一个小时还没弄好 因为我的很大 再说了 即使dump下来 我的电脑也装不下 如果 3G的堆dump文件 需要电脑 6G来解析 我上班的电脑不行

放弃~~~

2.2:尝试dump栈文件

2.2.1: 导出栈dump文件

执行命令:jstack -l pid >> /export/servers/jstack.txt

注意如果是生产环境 你看看自己是不是root权限 或者是项目的启动者才可以dump

后面导出的路径随便写

2.2.2:查找cpu占用高的线程

然后查看占用cpu比较高的线程

top -H
在这里插入图片描述

如果查看指定进程比较高的线程

top -H -p pid

2.2.3:在栈dump文件中找到高cpu线程

首先栈dump文件的线程id是十六进制的,需要先把2.2.2步骤得到十进制的转化为十六进制

命令为 :printf "%x" pid

然后在dump文件中搜索该十六进制的线程id

发现问题

在这里插入图片描述

定位代码

果然有问题

修改代码

再次查看

在这里插入图片描述

下班

今天发生字节员工的事,身为外包的我不敢卷了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值