У меня есть приложение Rails 4 на Heroku с Resque и Resque Scheduler, каждый из которых работает на отдельных динамиках 1x. В настоящее время у меня 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
Когда я ProFile использования памяти, я могу видеть, что на холостом ходу, мой resque
дино потребляет 390MB 512 МБ доступной памяти, в то время как мой web
дино потребляет только 262 МБ памяти. На первый взгляд это выглядит нормально, так как у меня много места для отдыха.
Когда я поставил в очередь 40 писем, которые будут разосланы на resque
дино, хотя использование памяти увеличится до 480 МБ. Если я стану больше в очереди, он будет расти до тех пор, пока он не превысит емкость dyno, и я получаю ошибку R14. Обратите внимание, что я не отправляю электронные письма с использованием API SendGrid, а не через SMTP, но у меня все еще есть render_to_string
каждый шаблон электронной почты (для этого нужен более эффективный маршрут), который, как я подозреваю, потребляет много памяти.
Что я хотел бы знать, так это лучший подход для оптимизации потребления ресурсов на Heroku? Я использую Resque
главным образом для обработки изображений и отправки пакетных писем. В настоящее время у меня есть три сотрудника, которые работают на одном динамометре, но я не уверен, что у меня должно быть больше или меньше рабочих на одном динамо или разбросано по нескольким динамикам. В настоящее время использование приложения довольно мало в большинстве случаев, однако я ожидаю, что его использование значительно возрастет в ближайшем будущем, и поэтому я обеспокоен масштабированием. Например, прямо сейчас у меня может быть один пользователь в день, загружать сразу 100 фотографий или отправлять 50 электронных писем сразу. Однако я ожидаю 10-кратного увеличения использования.
Я не ищу конкретный ответ как таковой, просто совет о том, как оптимизировать использование ресурсов и плавно масштабироваться. Благодаря!