![](https://img.haomeiwen.com/i3575048/1cbd206ddc8cf80a.png)
![](https://img.haomeiwen.com/i3575048/bfbf2059ac038ef0.png)
![](https://img.haomeiwen.com/i3575048/e59745975e61b3b4.png)
jvm参数优化后堆内存无压力:
![](https://img.haomeiwen.com/i3575048/616897bcf5a8f48e.png)
metadata区满了: 不够用 -> 增大 meta区大小
-XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M
![](https://img.haomeiwen.com/i3575048/0679710c23fccf15.png)
优化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% 发现有死锁
![](https://img.haomeiwen.com/i3575048/2d67bb01d5b79c26.png)
问题定位原因为: 获取redis资源死锁问题 -> 修复即可。
定位死锁稳定代码行:
![](https://img.haomeiwen.com/i3575048/d50a49779da61dbd.png)
![](https://img.haomeiwen.com/i3575048/9b4464f6def4a34d.png)
线程由于获取jedis连接而被BLOCKED阻塞,列举几个问题线程堆栈如下: 【实际Redis是单线程操作无需加锁,小伙伴获取jedis连接写法有问题】
![](https://img.haomeiwen.com/i3575048/f8fce9468e0f62d0.png)
现成堆栈显示有多个接口被jedis获取锁阻塞,以下皆为等待jedis释放锁状态被BLOCKED 的线程 问题代码行
![](https://img.haomeiwen.com/i3575048/0e7e2760123d6a97.png)
![](https://img.haomeiwen.com/i3575048/0a0f8ab644cbf7dc.png)
![](https://img.haomeiwen.com/i3575048/da7c9cfe91ebb83a.png)
网友评论