用途:把难以复现的进程挂起转为明确的锁序循环,按需复现,并交付能消除循环等待的修复。
主要能力:采集挂起进程状态(线程/协程/栈转储);构建等待图,图中出现的环即死锁;对循环等待进行分类(统一全局锁序、锁合并为单锁、缩小锁范围、tryLock+超时+退避、无锁/不可变、数据库按行排序并缩短事务);按需复现、施加修复并验证不再挂起。
必要用法:先采集证据再改代码,常用转储方式包括 Java 的 jstack <pid>、Go 发送 SIGQUIT 或 kill -ABRT <pid>、Python 的 py-spy dump --pid <pid>、C/C++/Rust 的 gdb -p <pid> 后 thread apply all bt、POSIX 线程的 pstack <pid>,数据库则查看引擎死锁日志(Postgres deadlock_timeout、MySQL SHOW ENGINE INNODB STATUS)。为每个阻塞线程确认其持有的锁与等待的锁,写出循环如 T1 持 A 等 B、T2 持 B 等 A,再选择修复类别,最后复现验证并加入回归测试。
限制:不要用盲目 sleep 或重试掩盖问题,持有锁时重试属于活锁;不要在不可控阻塞调用期间持锁;超时只是安全网,不能替代正确的锁顺序;若等待图无环,应考虑活锁、饥饿或外部调用慢;资料中未提供具体安装命令与价格信息。