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
发现问题
定位代码
果然有问题
修改代码
再次查看
下班
今天发生字节员工的事,身为外包的我不敢卷了。