рельсы восстанавливают потребление памяти работником - PullRequest
4 голосов
/ 29 августа 2011

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

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

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

0 голосов
/ 27 марта 2012

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

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

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

...