【发布时间】:2016-09-01 15:52:59
【问题描述】:
我在 Heroku 上有一个 Rails 4 应用程序,带有 Resque 和 Resque Scheduler,每个应用程序都在单独的 1x dyno 上运行。我目前有 3 名 Resque 工作人员启动。
这是我的Procfile供参考:
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
resque: env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=7 bundle exec rake resque:workers QUEUE='*' COUNT='3'
scheduler: bundle exec rake resque:scheduler
当我分析内存使用情况时,我可以看到在空闲时,我的resque dyno 消耗了 512MB 的可用内存中的 390MB,而我的web dyno 只消耗了 262MB 的内存。乍一看,这似乎没问题,因为我有足够的头部空间。
但是,当我在 resque dyno 上排队发送 40 封电子邮件时,内存使用量飙升至 480MB。如果我排队更多,它会增长,直到超过测功机的容量并且我收到 R14 错误。请注意,我没有使用 SendGrid API 而不是通过 SMTP 发送电子邮件,但我仍然必须 render_to_string 每个电子邮件模板(为此寻找更有效的路线),我怀疑这是消耗了很多记忆。
我想知道在 Heroku 上优化资源消耗的最佳方法是什么?我使用Resque 主要用于图像处理和发送批量电子邮件。我目前有 3 名工人在一台测功机上旋转,但我不确定我是否应该在一台测功机上使用更多或更少的工人,或者分散在多个测功机上。大多数情况下,该应用程序的当前使用量相当低,但我预计在不久的将来使用量会大大增加,因此我担心扩展。例如,现在我可能有一个用户每天一次批量上传 100 张照片,或者一次发送 50 封电子邮件。不过,我预计使用量很快会增加 10 倍。
我本身并不是在寻找具体的答案,只是关于如何优化我的资源使用并顺利扩展的建议。谢谢!
【问题讨论】:
标签: ruby-on-rails memory heroku scalability resque