死锁日记:手写 GoLang 上报队列
💡
原文中文,约7900字,阅读约需19分钟。
📝
内容提要
团队在防沉迷上报服务中遇到内存溢出(OOM)问题,分析发现是由于中午触发的bug导致Goroutines数量激增。通过实现队列上报,解决了死锁风险和定时器使用不当的问题,提升了系统效率。
🎯
关键要点
- 团队在防沉迷上报服务中遇到内存溢出(OOM)问题。
- Goroutines数量在中午触发的bug后激增,导致内存溢出。
- 实现队列上报,解决了死锁风险和定时器使用不当的问题。
- 队列设计中使用了无缓冲的channel和锁来管理状态。
- 死锁发生在队列瞬间达到阈值时,信号通道被写入但未被消费。
- 错误使用timer.Reset可能导致定时器误触发。
- 优化后的队列代码去掉了多余的flag值,并改进了channel信号处理。
- 通过这次优化,团队对使用channel的方式有了更深刻的理解。
➡️