Go 死锁排查 Checklist:从报错到定位的实用手册

标题 Go 死锁排查 Checklist:从报错到定位的实用手册 副标题 / 摘要 一页式清单,帮助你在看到 all goroutines are asleep - deadlock! 时, 快速定位是哪一类等待造成卡死。 目标读者 初学者:首次遇到 deadlock,不知道从哪下手。 中级开发者:需要可复用的排查流程,缩短定位时间。 团队负责人:希望沉淀成团队规范,避免重复踩坑。 背景 / 动机 死锁往往发生在高并发与多协作场景,复现难、定位慢。 有一份稳定的排查清单,可以把“凭直觉猜”变成“按步骤验证”。 核心概念 deadlock 报错:所有 goroutine 都在等待,程序无法推进。 堆栈定位:栈上出现 <-ch / ch <- / mu.Lock() / wg.Wait()。 依赖闭环:等待关系形成环,导致无人能继续执行。 实践指南 / 步骤 1️⃣ 确认报错与堆栈是否完整 记录 fatal error: all goroutines are asleep - deadlock! 后的完整堆栈。 优先关注 main goroutine 的等待点。 2️⃣ 分类定位阻塞类型 channel:<-ch / ch <- WaitGroup:wg.Wait() Mutex:mu.Lock() / RWMutex 的读写锁等待 3️⃣ 检查等待关系是否闭环 ...

2026年1月19日 · 1 分钟 · map[name:Jeanphilo]