我在Heroku上使用Rails 4應用程序,並使用Resque和Resque Scheduler,每個應用程序在單獨的1x dynos上運行。我目前有3名Resque員工旋轉起來。爲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
賽道被消耗可用內存512MB的390MB,而我的web
賽道僅消耗內存262MB。乍看之下,這似乎確定,因爲我有足夠的空間。
當我排隊40級的郵件要在resque
賽道雖然送出,內存使用率峯值可達480MB。如果我排隊更多,它會增長,直到它超出測功機的容量,並且出現R14錯誤。請注意,我不是使用SendGrid API而是通過SMTP發送電子郵件,但我仍然需要爲每個電子郵件模板render_to_string
(爲此尋找一條更有效的路線),這是我懷疑會消耗大量內存的原因。
我想知道什麼是最好的辦法就是在這裏以優化在Heroku我的資源消耗?我主要使用Resque
進行圖像處理併發送批量電子郵件。我目前有三名工人在一臺測功機上旋轉,但我不確定我是否應該在一臺測功機上安裝更多或更少的工人,或者分佈在多臺測功機上。目前該應用程序的使用情況在大多數時間都很低,但我預計在不久的將來使用量會大幅增加,因此我們擔心縮放問題。例如,現在我可能每天有一位用戶批量上傳100張照片,或一次發送50封電子郵件。儘管如此,我預計使用量會增加10倍。
我不是在尋找一個明確的答案本身,如何優化我的資源使用情況,順利擴大隻是建議。謝謝!