记一次内存泄露的debug过程
这篇讲的是作者在压测“代码在线运行”工具时,遭遇了高并发下内存飙升且无法回落的问题。从自身代码审查无果,他转向使用Go语言内置的pprof工具进行深度剖析。 通过分析堆内存分配的热点,问题指向了goroutine与ioPipe的交互。作者进一步验证,发现大量goroutine因ioPipe未被正确关闭而持续存在,无法回收,从而造成了内存的持续累积。根源在于异常退出前未主动关闭资源。 定位后,解决方案变得清晰:在程序逻辑中确保主动关闭ioPipe的Reader。修复后,作者使用wrk工具进行了长时间压测,并监控goroutine数量,确认内存占用稳定,问题得以解决。文章结尾点出,这个因粗心引起的小bug,修复却需借助专业工具链,提醒开发者熟悉语言提供的诊断工具至关重要。