当dyno闲置时,Heroku上的Unicorn内存泄漏

时间:2014-12-04 02:42:10

标签: ruby-on-rails heroku memory-leaks unicorn

短版

当没有任何请求时,使用Rails + Unicorn的Heroku上的内存泄漏和R14错误。本地,或Webrick,或服务器负载不成问题。

长版

我在Heroku上运行了一个Rails 4应用程序。当服务器上没有负载时,Heroku报告的内存消耗大约每分钟0.5 MB。几个小时后,R14错误开始出现在日志中,一段时间后,该过程没有响应,Heroku将其杀死。 我也可以看到New Relic中不断增加的内存使用量。

02:03:00 heroku[web.1]: source=web.1 sample#load_avg_1m=0.00 sample#load_avg_5m=0.00 sample#load_avg_15m=0.00 02:03:00 heroku[web.1]: source=web.1 sample#memory_total=533.19MB sample#memory_rss=511.88MB sample#memory_cache=0.00MB sample#memory_swap=21.30MB sample#memory_pgpgin=1034783pages sample#memory_pgpgout=903740pages 02:03:00 heroku[web.1]: Process running mem=533M(104.1%)

环境: Ruby 2.1.4 + Rails 4.1.7 + Unicorn + Heroku with 1 web dyno

到目前为止我尝试了什么

  1. 将Unicorn工作人员的数量从默认的3减少到2.没有帮助,只是让内存泄漏慢一点。

  2. 已禁用的后台工作程序(从Procfile中删除)。没有效果。没有改变任何东西。

  3. 已安装的独角兽工作者杀手。它没有帮助,因为没有任何请求,所以工人杀手永远不会开始(是否有基于时间的工人杀手?)。

  4. 使用ApacheBench对服务器进行压力测试。根据New Relic的说法,内存使用量是恒定的,大约190MB /流程。没有增加。似乎只有在没有服务器负载时才会发生内存泄漏。

  5. 删除了Unicorn并使用了默认的Webrick。根据New Relic,内存使用情况变得不变,大约208MB /实例!

  6. 尝试通过RAILS_ENV=production foreman start启动生产中的服务器,在本地计算机上重现此问题。在这种情况下没有内存泄漏。

  7. 基于第5点,我认为内存泄漏与Unicorn有关但不知何故只发生在Heroku上。 如何追踪问题出在哪里?

    谢谢!任何帮助表示赞赏。

0 个答案:

没有答案