凌晨3点的警报:一个导致 50000 多个 Goroutine 泄漏的 Bug 分析

本文永久链接 – https://tonybai.com/2026/01/22/a-bug-cause-50000-goroutine-leak 大家好,我是Tony Bai。 内存占用 47GB,响应时间飙升至 32秒,Goroutine 数量达到惊人的 50847 个。 这是一个周六凌晨 3 点,发生在核心 API 服务上的真实噩梦。运维正准备重启服务止损,但 Serge Skoredin 敏锐地意识到:这不是普通的内存泄漏,而是一场已经潜伏了 6 周、呈指数级增长的 Goroutine 泄漏。 ...

January 22, 2026 · 5 min · Tony Bai

2024年Go语言盘点:排名历史新高,团队新老传承

2024年Go语言盘点:排名历史新高,团队新老传承 - Tony Bai =============== Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 ...

January 6, 2025 · 12 min · Tony Bai

Go语言演进的双保险:GOEXPERIMENT与GODEBUG

本文永久链接 – https://tonybai.com/2024/10/11/go-evolution-dual-insurance-goexperiment-godebug Go语言自诞生以来就以其简洁、高效和强大的并发支持而闻名,Go团队承诺保持Go1向后兼容性,以确保用户的代码在未来的版本中继续正常运行。然而,保持语言的稳定性与不断创新(增加新特性)之间的平衡一直是Go团队面临的挑战。为了应对这一挑战,Go语言引入了两个关键机制:GOEXPERIMENT和GODEBUG来平衡新功能的试验、稳定发布和向后兼容。这两个机制共同构成了Go语言特性发布的“双保险”,确保语言能够稳步前进的同时,不会因为激进的改变而影响现有代码的稳定性。本文就来简单探讨一下这两个机制是如何保障Go语言新特性稳定发布的。 1. GOEXPERIMENT:新特性的摇篮 GOEXPERIMENT是一个Go语言的环境变量,是用于控制实验性特性的机制。它允许开发者在编译时(使用go build、go install、go run或go test)启用一些尚未正式发布的语言特性或优化。通过GOEXPERIMENT,Go团队能够在正式发布之前广泛测试新功能,收集反馈并进行必要的调整。 ...

October 11, 2024 · 12 min · Tony Bai

Go 1.23中值得关注的几个变化

本文永久链接 – https://tonybai.com/2024/08/19/some-changes-in-go-1-23 距离上一次Go 1.22版本发布又过去六个月了,我们如期迎来了Go 1.23版本的发布。 对于Go项目乃至整个Go社区而言,这个版本还有一点额外的意义,那就是这是Russ Cox作为Tech lead,领导Go团队发布的最后一个Go版本了。 ...

August 19, 2024 · 18 min · Tony Bai

Go 1.23新特性前瞻

本文永久链接 – https://tonybai.com/2024/05/30/go-1-23-foresight 2024年5月22日,Go 1.23版本功能特性正式冻结,后续将只改bug,不增加新feature。 对Go团队来说,这意味着开始了Go 1.23rc1的冲刺,对我们普通Gopher而言,这意味着是时候对Go 1.23新增的功能做一些前瞻了! ...

May 30, 2024 · 12 min · Tony Bai

ants:在Submit中再调用当前Pool的Submit可能导致阻塞

本文永久链接 – https://tonybai.com/2021/11/27/ants-call-submit-in-submit-may-cause-blocking 1. goroutine pool的必要性 Go在并发程序方面的一个小创新就是支持轻量级用户线程goroutine,不过虽然goroutine很轻,但并不是免费的,尤其是Go程序中存在大量goroutine反复启停时(比如采用每连接一个goroutine的处理http短连接的http server,在大并发的情况下就是如此),Go运行时启停和调度goroutine的开销还是蛮大的。这个时候我们对goroutine pool的需求就诞生了。 ...

November 27, 2021 · 10 min · Tony Bai