JVM面试篇线上cpu占用99系统假死问题定位
头条创作挑战赛
运行一段时间后cpu占用99
访问系统白屏假死很长时间才响应
jvm参数设置不合理:eden区占用较高metaspace较小优化jvm参数
gclog显示eden区大小不够优化jvm参数
jvm参数优化后堆内存无压力:
jvm参数优化后堆内存无压力
metadata区满了:不够用增大meta区大小
XX:MetaspaceSize512MXX:MaxMetaspaceSize1024M
metaspace占用
优化jvm参数后(运行一段时间后cpu占用还是飙升到99)且系统负载较高
排查cpu飙升过程:vmstat14
pidstatp866ut13查找占用cpu较高线程id2109
printfx210983d问题线程nid:0x83d
打印线程堆栈信息:发现死锁问题
jstackFl2109homeworkzhibijstack210983d。txtThread2109:(stateINNATIVE)cpu98发现有死锁
redis连接资源获取死锁问题
问题定位原因为:获取redis资源死锁问题修复即可。
定位死锁稳定代码行:
定位死锁问题代码行
问题行加锁并发竞争激烈时会BOLCKED线程执行
线程由于获取jedis连接而被BLOCKED阻塞,列举几个问题线程堆栈如下:【实际Redis是单线程操作无需加锁,小伙伴获取jedis连接写法有问题】
锁定jedis代码行
现成堆栈显示有多个接口被jedis获取锁阻塞,以下皆为等待jedis释放锁状态被BLOCKED的线程问题代码行
1。获取设备接口
2。心跳接口
3。物料接口