Рельсы восстанавливают потребление памяти работником
Я использую Resque Gem для обработки моего фонового процесса.
Я настроил три очереди с одним рабочим каждый.
Может ли кто-нибудь объяснить, как расходуется память при увеличении и уменьшении рабочего в очереди.
Я слышал, что каждый работник загружает отдельную среду Rails. Это правда?
2 ответа
Насколько я знаю, да, каждый работник запускает отдельную среду Rails, поэтому, если у вас три сотрудника, у вас будет загружено три среды Rails. Если у вас будет больше рабочих, ваша очередь не будет расти дольше, а количество заданий в очереди будет расти.
В любом случае, если у вас нет серьезных причин иметь 3 отдельных работника, я предлагаю вам иметь только одного работника для всех очередей и разделять их, поскольку ваше приложение масштабируется со временем.
Это неправда. Как я объяснил в своем комментарии здесь, точная цель Resque - не загружать среду rails для каждого работника (см. https://github.com/blog/542-introducing-resque).
Из-за ограничения, вызванного решением для рубинового зеленого обхода, вы должны запустить хотя бы одного работника на каждое ядро процессора, чтобы иметь возможность использовать весь ЦП. Вот почему по умолчанию Resque запускает каждого работника в отдельном процессе. Это означает запуск N параллельных процессов одновременно, каждый с полным набором гемов, загруженным независимо. Это является основной причиной высокого использования памяти для Resque и любого другого инструмента Ruby. Вы можете увидеть здесь, как все может быть лучше, используя нативную многопоточность с JVM.
Поэтому, если вы хотите уменьшить использование памяти Resque, сохраняйте свои рабочие зависимости как можно ниже. И всегда очень важно использовать инструмент мониторинга, такой как God или Bluepill, чтобы следить за процессом.