go
resource_error
ai_generated
true
fatal error: runtime: out of memory (timer channel leak)
ID: go/goroutine-timer-channel-leak
80%Fix Rate
84%Confidence
0Evidence
2025-01-15First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 1.20 | active | — | — | — |
| 1.21 | active | — | — | — |
Root Cause
Creating many time.Timer or time.Ticker without stopping them, causing goroutine and channel leaks that exhaust memory.
generic中文
创建大量 time.Timer 或 time.Ticker 而不停止它们,导致协程和通道泄漏,耗尽内存。
Workarounds
-
95% success Always stop timers after use with defer.
timer := time.NewTimer(1 * time.Second) defer timer.Stop() select { case <-timer.C: // do something } -
90% success Use time.NewTicker and stop it when done.
ticker := time.NewTicker(1 * time.Second) defer ticker.Stop() for range ticker.C { // periodic work if condition { break } }
Dead Ends
Common approaches that don't work:
-
Using time.After in a loop without resetting.
90% fail
Each call to time.After creates a new timer; if not stopped, they accumulate.
-
Assuming timers are garbage collected after firing.
80% fail
Timers are not GC'd until they fire or are stopped; if not stopped, they remain in memory.