cpu 持续占用99% & 系统假死问题定位

运行一段时间后cpu占用99%
访问系统白屏假死-很长时间才响应




jvm参数设置不合理:eden区占用较高 & meta space较小优化jvm参数


gc-log显示 eden区大小不够优化jvm参数

jvm参数优化后堆内存无压力:


jvm参数优化后堆内存无压力

metadata区满了: 不够用 -> 增大 meta区大小 

 -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M


meta space占用


优化jvm参数后(运行一段时间后cpu占用还是飙升到99%) 且系统负载较高

排查cpu飙升过程:

vmstat 1 4

pidstat -p 866 -u -t 1 3   -> 查找占用cpu较高线程id 2109

printf "%x" 2109  -> 83d  -> 问题线程nid: 0x83d  

# 打印线程堆栈信息: 发现死锁问题

jstack -F -l 2109  >> /home/work/zhibi/jstack_2109_83d.txt  ->  Thread 2109: (state = IN_NATIVE)  cpu 98% 发现有死锁


redis连接资源获取死锁问题

问题定位原因为: 获取redis资源死锁问题 -> 修复即可。

定位死锁稳定代码行:

定位死锁问题代码行


问题行加锁并发竞争激烈时会BOLCKED线程执行

线程由于获取jedis连接而被BLOCKED阻塞,列举几个问题线程堆栈如下: 【实际Redis是单线程操作无需加锁,小伙伴获取jedis连接写法有问题】


锁定jedis代码行

现成堆栈显示有多个接口被jedis获取锁阻塞,以下皆为等待jedis释放锁状态被BLOCKED 的线程 问题代码行

1.获取设备接口


2.心跳接口


3.物料接口
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容