背景介绍
某次上线后服务goroutine数量激增,怀疑是goroutine泄露导致,监控如下
分析
本次上线的是一个web接口服务,尝试在线下模拟复现问题
使用wrk压测goroutine数开始上涨,停止wrk后goroutine数未回落
使用pprof查看goroutine profile后发现项目中存在goroutine阻塞情况
代码如下
将传输channel调整为缓冲channel后问题解决
Goroutine泄露
goroutine在channel上发生阻塞或进入死循环导致系统goroutine数越积越多的现象就是goroutine泄露
解决方法
1.使用缓冲channel
2.主动通知终止
扩展
1.如何观测分析goroutine泄露
- 通过监控工具
- 通过pprof