前言 害。。。 昨天刚写完一份关于JVM问题排查相关的博客,今天线上项目就遇到了一个突发问题。 现象是用户反映系统非常卡,无法操作。 然后登录服务器查看发现cpu 一直100%以上。 具体排查步骤: 1,首先top命令查看服
害。。。
昨天刚写完一份关于JVM问题排查相关的博客,今天线上项目就遇到了一个突发问题。
现象是用户反映系统非常卡,无法操作。
然后登录服务器查看发现cpu 一直100%以上。
发现线上pid 29737的 java应用cpu达到100%
top -H -p 29373
输入上述命令,然后按H显示cpu最高排名的线程。可以看到pid 30013的线程cpu 100%且一直未释放。
printf "%x\n" 30013
30013做16进制转换为753D
使用该命令打印堆栈信息的后50行
jstack 29737 |grep -A 50 753d
然后就可以具体看到具体的出问题的是哪部分代码了,然后检查更改即可。(我们的是代码中出现死循环)
可能会出现以下报错:
xxxx: Unable to open Socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
有两个可能:
jstack后面的进程pid不对,或者16进制的数不对。
需要注意jstack后面是jps的java进程id。
2.执行该命令的用户必须和java应用所属的用户一致。
程序中存在死循环或者长时间占用 CPU 的操作。比如,不合理的递归操作、循环操作等等。
程序中存在大量的计算操作,例如复杂的算法、大量的数值计算等等。
程序中存在大量的 IO 操作,例如读写文件、网络通信等等。
程序中存在大量的线程创建和销毁操作,以及线程间的竞争和同步操作。
程序中存在内存泄漏或者内存溢出,导致 JVM 不断进行垃圾回收。
针对这些问题,需要具体情况具体分析,采取相应的优化措施,例如修改代码逻辑、优化算法、降低 IO 操作频率、减少线程创建和销毁、增加 JVM 内存等等。
来源地址:https://blog.csdn.net/qq_33129875/article/details/129283010
--结束END--
本文标题: java 应用cpu飙升(超过100%)故障排查
本文链接: https://lsjlt.com/news/386683.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0