goroutine泄漏
什么叫goroutine泄漏:
如果goroutine数量是在不断增加的,资源长时间无法释放,最终导致资源耗尽,程序崩溃
泄漏原因:
- goroutine内运行channel、mutex等读写操作被一直阻塞
- goroutine内业务逻辑陷入死循环,资源一直无法释放
- goroutine的业务逻辑进入长时间等待,同时又不断有新增的goroutine进入等待
泄漏场景:
nil channel
channel忘记初始化,那么无论是读写都会造成阻塞
- 无缓冲channel只发送不接收,会造成阻塞
- 无缓冲channel只接收不发送,会造成阻塞
- 有缓冲channel只发送不接收,缓冲队列满了之后会阻塞
- 发起http请求时,body未被关闭,goroutine不会退出
- 互斥锁只加锁未解锁,第一个goroutine加锁成功后不进行解锁,其他goroutine都会等待加锁而阻塞
- sync.WaitGroup add数量大于done的数量
如何排查:pprof监测goroutine数量
不错不错,我喜欢看 www.jiwenlaw.com
不错不错,我喜欢看 www.jiwenlaw.com
想想你的文章写的特别好https://www.ea55.com/
怎么收藏这篇文章?