Рельсы восстанавливают потребление памяти работником

Я использую Resque Gem для обработки моего фонового процесса.

Я настроил три очереди с одним рабочим каждый.

Может ли кто-нибудь объяснить, как расходуется память при увеличении и уменьшении рабочего в очереди.

Я слышал, что каждый работник загружает отдельную среду Rails. Это правда?

2 ответа

Решение

Насколько я знаю, да, каждый работник запускает отдельную среду Rails, поэтому, если у вас три сотрудника, у вас будет загружено три среды Rails. Если у вас будет больше рабочих, ваша очередь не будет расти дольше, а количество заданий в очереди будет расти.

В любом случае, если у вас нет серьезных причин иметь 3 отдельных работника, я предлагаю вам иметь только одного работника для всех очередей и разделять их, поскольку ваше приложение масштабируется со временем.

Это неправда. Как я объяснил в своем комментарии здесь, точная цель Resque - не загружать среду rails для каждого работника (см. https://github.com/blog/542-introducing-resque).

Из-за ограничения, вызванного решением для рубинового зеленого обхода, вы должны запустить хотя бы одного работника на каждое ядро ​​процессора, чтобы иметь возможность использовать весь ЦП. Вот почему по умолчанию Resque запускает каждого работника в отдельном процессе. Это означает запуск N параллельных процессов одновременно, каждый с полным набором гемов, загруженным независимо. Это является основной причиной высокого использования памяти для Resque и любого другого инструмента Ruby. Вы можете увидеть здесь, как все может быть лучше, используя нативную многопоточность с JVM.

Поэтому, если вы хотите уменьшить использование памяти Resque, сохраняйте свои рабочие зависимости как можно ниже. И всегда очень важно использовать инструмент мониторинга, такой как God или Bluepill, чтобы следить за процессом.

Другие вопросы по тегам