解决内存泄漏记录
创建于: 2018-01-02   最后更新: 2018-01-06
记录 总结

https://devcenter.heroku.com/articles/ruby-memory-use#too-many-workers-over-time

过程

  1. 首先降低 puma 的 worker = 1 ,结果基本没用

  2. 查看是不是 gem 的问题,用到了 derailed 这个 gem, to see how much memory each gem uses at boot time

分析发现 countries 用了 5MB 多的内存,去掉之后确实不报 R14 错误了,说明确实是存在 gem 使用问题导致内存泄漏的问题

最后通过 update 了 carrierwave 和 fog gem 到 latest versioin,减小了内存占用,问题解决

啊。发现问题还是没有解决,并发高的时候内存又溢出了。。

判断可能是属于 Too much memory used at runtime

装了个 scout_apm(heroku 的 add-on)分析了一下

再一查发现还是一个查询语句的问题,出现了慢查询,有一个查询花了接近10秒。最后把查询语句简化,问题解决。

总结

内存超出(Memory Quota Exceeded),排查两个问题:

  1. 服务器的问题。worker 是否过多?Puma 切换到 unicorn?

  2. gem的使用问题。使用 derailed gem 可以分析 gem 的内存使用情况;

  3. 参考 https://devcenter.heroku.com/articles/ruby-memory-use#too-many-workers-over-time 排查问题