应用“假死”:CPU 2%,请求全挂,jstack 一眼看出两个线程在互相“谦让”
服务进程在、端口通、健康检查也过,但所有业务请求都卡住,CPU 只有 2%。jstack 直接报出 Found one Java-level deadlock。本文含最小可复现代码、输出逐行解读,以及锁顺序统一、tryLock 超时、缩小锁粒度三种修法。
从一个关键词,发现新的思路。
服务进程在、端口通、健康检查也过,但所有业务请求都卡住,CPU 只有 2%。jstack 直接报出 Found one Java-level deadlock。本文含最小可复现代码、输出逐行解读,以及锁顺序统一、tryLock 超时、缩小锁粒度三种修法。
业务偶发报 MySQL 1213 死锁,几百单里才一两单。用 SHOW ENGINE INNODB STATUS 逐行读懂 LATEST DETECTED DEADLOCK,配合 innodb_print_all_deadlocks 复现两类典型死锁:相反顺序加锁与间隙锁,并给出重试和统一加锁顺序的治法。