go
resource_error
ai_generated
true
致命错误:运行时:内存不足(定时器泄漏)
fatal error: runtime: out of memory (timer leak)
ID: go/goroutine-timer-leak
80%修复率
85%置信度
0证据数
2025-12-20首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 1.0 | active | — | — | — |
| 1.20 | active | — | — | — |
根因分析
创建time.Timer或time.Ticker而不停止它们,导致协程泄漏和内存耗尽。
English
Creating time.Timer or time.Ticker without stopping them, causing goroutine leak and memory exhaustion.
解决方案
-
95% 成功率 Always stop timers and tickers when done
ticker := time.NewTicker(time.Second) defer ticker.Stop() for range ticker.C { // do work } -
85% 成功率 Use time.After with select and timeout
select { case <-ch: case <-time.After(5 * time.Second): // timeout }
无效尝试
常见但无效的做法:
-
Using time.After repeatedly without reset
90% 失败
time.After creates new timer each call; old timers are not garbage collected until fired.
-
Ignoring ticker stop in defer
80% 失败
Ticker continues to tick; goroutine leaks.