死锁问题定位与分析
死锁问题定位与分析
一.环境搭建
1.准备脚本,执行压测
2.用jstack 打印日志
jstack 112759 >dead.log
3.下载日志到本地
sz dead.log
二.问题定位
1.打开dead.log
搜索deadlock
2.查看死锁的线程
3.查看死锁位置
三.问题分析
1.下载死锁的类文件
Sz CaseController.class
2.使用jd-gui工具,打开文件,根据提示路径找到死锁的代码
at cn.testfan.perf.beihe.pinter.http.CaseController.dead(CaseController.java:81)
四.优化思路
1.避免嵌套枷锁
2.减少加锁的内容
五.线程阻塞和线程死锁的异同对比
1.相同点:都是代码加锁导致
2.不同点
阻塞只有一个锁,发生阻塞后只是性能慢,程序可运行
死锁嵌套枷锁,发生死锁后服务器不相应请求,cpu资源利用率为0