什么叫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数量

标签: none

添加新评论