README
# 🛠 Go 工程实战与故障排错专栏
把"会写 Go"升级为"会上线 Go"——17 篇实战,每一篇都源自真实线上场景
# 📖 专栏概览
| 模块 | 文章数量 | 难度 | 重点内容 |
|---|---|---|---|
| 故障排错 | 5 篇 | ★★★★ | OOM、panic、调试、Delve、goroutine 泄漏 |
| 性能调优 | 5 篇 | ★★★★ | pprof、trace、性能优化、缓存友好、PGO |
| 工程能力 | 5 篇 | ★★★ | 安全、编译链接、静态分析、Code Review、日志监控 |
| 上线运维 | 2 篇 | ★★★★★ | 灰度发布、故障复盘 |
# 🎯 学习路径
# 入门技巧 → 实战调优 → 上线运维
入门技巧(先会读栈、能调试):02 panic → 03 调试 → 04 Delve → 13 静态分析
实战调优(线上服务必修): 05 goroutine 泄漏 → 06 pprof → 07 trace → 09 性能优化
工程能力(团队协作必修): 08 安全 → 12 编译链接 → 14 Code Review → 15 日志监控
上线运维(架构师视角): 16 灰度发布 → 17 故障复盘
PGO 进阶: 10 缓存友好 → 11 PGO → 01 OOM
1
2
3
4
5
2
3
4
5
# 📚 文章目录
# 模块一:故障排错
- 01.OOM 排查实录 ⭐⭐⭐⭐
- 一次容器 OOM 的 5 小时排查全流程:
runtime.MemStats→ pprof heap →go tool pprof -alloc_space→ 定位泄漏点
- 一次容器 OOM 的 5 小时排查全流程:
- 02.panic 与 recover 全景图 ⭐⭐⭐⭐
- panic 的 5 种来源、栈展开过程、
recover必须配 defer 的原因、跨 goroutine 不能 recover、第三方库runtime.SetPanicOnFault
- panic 的 5 种来源、栈展开过程、
- 03.调试技巧与原理分析 ⭐⭐⭐
- 打印调试 / 日志调试 / 断点调试三种范式、
runtime.Caller取调用栈、用GODEBUG看调度/GC、用GOTRACEBACK控制崩溃输出
- 打印调试 / 日志调试 / 断点调试三种范式、
- 04.Delve 调试器实战 ⭐⭐⭐⭐
- dlv 安装与启动、
break/next/step/print/goroutines/threads、远程调试 (dlv connect)、调试 Go test、调试线上 core
- dlv 安装与启动、
- 05.goroutine 泄漏排查实战 ⭐⭐⭐⭐
- 5 种泄漏模式:channel 永久阻塞 / context 未取消 / select 缺 default / time.After 累积 / sync.Pool 持有大对象;用
pprof goroutine?debug=2抓现场
- 5 种泄漏模式:channel 永久阻塞 / context 未取消 / select 缺 default / time.After 累积 / sync.Pool 持有大对象;用
# 模块二:性能调优
- 06.pprof 性能剖析实战 ⭐⭐⭐⭐
- CPU profile / heap / allocs / block / mutex 5 种 profile、火焰图解读、
go test -bench -cpuprofile、net/http/pprof在线采集、采样原理(每秒 100 次)
- CPU profile / heap / allocs / block / mutex 5 种 profile、火焰图解读、
- 07.trace 调度可视化实战 ⭐⭐⭐⭐
runtime/trace采集、go tool trace解读 9 个视图、定位 GC stop-the-world、定位 schedule latency、定位 syscall 阻塞
- 09.性能优化实战 ⭐⭐⭐⭐
- 真实接口 P99 从 800ms 优化到 50ms 全过程:减少分配 → 减少 GC → 减少锁 → 减少 syscall
- 10.缓存友好编程 ⭐⭐⭐⭐
- CPU cache line、false sharing、热点 struct 字段重排、
runtime.Gosched让出、批量处理替代循环
- CPU cache line、false sharing、热点 struct 字段重排、
- 11.PGO 与编译优化 ⭐⭐⭐⭐
- Go 1.21 PGO 实战、采集 profile、
-pgo=auto、内联与逃逸的 PGO 影响、性能提升 2-7% 的真实数据
- Go 1.21 PGO 实战、采集 profile、
# 模块三:工程能力
- 08.安全漏洞图鉴 ⭐⭐⭐⭐
- SSRF / 反序列化 RCE / 整数溢出 / SQL 注入 / 越权 /
unsafe误用、govulncheck实战
- SSRF / 反序列化 RCE / 整数溢出 / SQL 注入 / 越权 /
- 12.编译链接原理 ⭐⭐⭐⭐
go build -x看完整流程、-ldflags "-s -w"二进制瘦身、-trimpath清路径、go:linkname跨包黑魔法、debug 符号丢失排查
- 13.静态分析工具 ⭐⭐⭐
go vet/staticcheck/golangci-lint配置、自定义 linter(基于go/analysis)、CI 集成
- 14.代码规范评审 ⭐⭐⭐
- Code Review checklist:错误处理 / context 传递 / goroutine 边界 / 接口最小化 / 并发安全 / 日志规范、Uber Go Style Guide 精华
- 15.日志监控告警 ⭐⭐⭐⭐
log/slog(Go 1.21+)、OpenTelemetry trace、Prometheus metrics、ELK 日志、告警 SLO/SLI 设计
# 模块四:上线运维
- 16.灰度发布稳定 ⭐⭐⭐⭐
- 全链路灰度、流量染色、Kubernetes 滚动更新与 Pod 优雅退出、
SIGTERM处理、连接 drain
- 全链路灰度、流量染色、Kubernetes 滚动更新与 Pod 优雅退出、
- 17.线上故障复盘 ⭐⭐⭐⭐⭐
- 5 个真实事故全流程脱敏复盘:单条慢 SQL 拖垮服务 / 一次 GC 抖动雪崩 / DNS 故障与超时风暴 / 第三方库内存泄漏 / 跨机房网络分区
# 🎓 排错知识图谱
graph TB
A[线上 Go 服务异常] --> B{现象?}
B -->|进程退出| C[panic / signal]
B -->|内存暴涨| D[OOM]
B -->|延迟抖动| E[GC / 锁 / 调度]
B -->|goroutine 暴涨| F[泄漏]
B -->|CPU 跑满| G[死循环 / 热点]
C --> C1[02 panic 全景图]
C --> C2[GOTRACEBACK=crash + core dump]
D --> D1[01 OOM 排查]
D --> D2[06 pprof heap]
E --> E1[07 trace 调度]
E --> E2[09 性能优化]
E --> E3[卷三 07 GC]
F --> F1[05 goroutine 泄漏]
F --> F2[06 pprof goroutine]
G --> G1[06 pprof CPU]
G --> G2[10 缓存友好]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 📈 学习建议
- 先读模块一(排错):故障排错是工程师"差距最明显"的能力,先把这 5 篇读完,团队会立刻看到你的成长
- 再读模块二(调优):pprof + trace 是 Go 工程师的"瑞士军刀",掌握后能解决 90% 的性能问题
- 模块三随用随查:工程能力是"日积月累",把这 5 篇当 checklist 用,每次写代码前对一遍
- 模块四进阶必读:当你成长为团队 Lead,灰度 + 故障复盘是必备能力
# 🔗 与其他卷的衔接
| 本卷章节 | 关联的卷一/卷三章节 |
|---|---|
| 01 OOM 排查 | 卷三 01 内存模型、卷三 07 GC |
| 02 panic 全景图 | 卷一 11 错误处理、卷三 14 错误 panic 机制 |
| 04 Delve 调试器 | 卷三 06 GMP、卷三 16 编译链接 |
| 05 goroutine 泄漏 | 卷一 12 goroutine、卷三 06 GMP、卷三 08 channel |
| 06 pprof | 卷三 06 GMP、卷三 07 GC、卷三 09 sync |
| 07 trace | 卷三 06 GMP、卷三 15 netpoller |
| 09 性能优化 | 卷三 02 逃逸、卷三 04 切片 |
| 10 缓存友好 | 卷三 03 结构体对齐 |
| 11 PGO | 卷三 16 编译链接 |
| 12 编译链接 | 卷三 16 编译链接 |
| 15 日志监控 | 卷一 11、12 章 |
| 17 故障复盘 | 串联本卷所有章节 |
# 🛡 推荐工具链
| 类别 | 工具 | 在哪一篇出现 |
|---|---|---|
| 调试 | Delve | 04 |
| 性能剖析 | pprof(cpu/heap/block/mutex/goroutine) | 06 |
| 调度可视化 | go tool trace | 07 |
| 静态分析 | go vet / staticcheck / golangci-lint | 13 |
| 安全扫描 | govulncheck / gosec | 08 |
| 日志 | log/slog / zap | 15 |
| 监控 | Prometheus / Grafana | 15 |
| 链路追踪 | OpenTelemetry | 15 |
| 容器编排 | Kubernetes | 16 |
| 二进制工具 | go tool objdump / go tool nm / addr2line | 12 |
# 🔮 未来扩展
- eBPF 在 Go 服务可观测性中的应用
- WASM 部署的故障排查
- 大规模微服务的 cgo 内存问题
- ARM64 / RISC-V 平台特异性故障
本专栏持续更新中,欢迎结合自己的线上事故来贡献新章节!
# 📚 推荐参考资料
# 排错与调优
- Profiling Go Programs (opens new window) — 官方 pprof 教程
- Russ Cox: Go Execution Tracer (opens new window) — trace 设计文档
- Dave Cheney: High Performance Go Workshop (opens new window)
- Uber Go Style Guide (opens new window)
- Google Go Style Guide (opens new window)
# 工程实践
- Effective Go (opens new window)
- Go Code Review Comments (opens new window)
- Common Go Mistakes (opens new window) — Teiva Harsanyi 的 100 Mistakes 网页版
- SRE Book (opens new window) — Google SRE 实践经典
上次更新: 2026/06/10, 11:13:41