需求是開發一個golang binary週期性收集host上docker container的log資訊。結果運行的時候使用go pprof查看發現goroutine洩露了。自己試了半天沒解決。
記憶體使用情況,記憶體會不斷增加,一直到33m:
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS goleak 0.00% 11.25 MiB / 32 MiB 35.14% 0 B / 0 B 6.112 MB / 0 B 0
pprof中結果:
/debug/pprof/ profiles: 0 block 63 goroutine 0 heap 7 threadcreate full goroutine stack dump
由於debug期間個人對程式碼進行了最佳化,是個goroutine增加速度大大降低。最多的時候有3000
個。
goroutine-leak,使用govendor管理依賴套件。
我把有問題的程式碼抽離出來放到main.go裡,並且維護在了github上,地址goroutine-leak。裡面預設整合了pprof功能,有興趣的夥伴可以一起debug學習下。
我也會不斷嘗試各種方法來解決這個問題。