死锁日记:手写 GoLang 上报队列

💡 原文中文,约7900字,阅读约需19分钟。
📝

内容提要

团队在防沉迷上报服务中遇到内存溢出(OOM)问题,分析发现是由于中午触发的bug导致Goroutines数量激增。通过实现队列上报,解决了死锁风险和定时器使用不当的问题,提升了系统效率。

🎯

关键要点

  • 团队在防沉迷上报服务中遇到内存溢出(OOM)问题。
  • Goroutines数量在中午触发的bug后激增,导致内存溢出。
  • 实现队列上报,解决了死锁风险和定时器使用不当的问题。
  • 队列设计中使用了无缓冲的channel和锁来管理状态。
  • 死锁发生在队列瞬间达到阈值时,信号通道被写入但未被消费。
  • 错误使用timer.Reset可能导致定时器误触发。
  • 优化后的队列代码去掉了多余的flag值,并改进了channel信号处理。
  • 通过这次优化,团队对使用channel的方式有了更深刻的理解。
➡️

继续阅读