Использование "rails runner" для задач cron очень сильно загружает процессор - альтернативы? - PullRequest
3 голосов
/ 16 сентября 2011

В настоящее время я использую cron и rails runner для выполнения фоновых заданий. По большей части эти задания представляют собой простые опросы «Найдите записи, которые должны получить напоминание по электронной почте. Отправьте это письмо».

Я наблюдал за своим экземпляром Amazon EC2 Small и заметил, что каждый раз, когда запускается одно из этих заданий cron, загрузка процессора возрастает до ~ 99%. Маленький крошечный запрос в моей нынешней работе определенно не ответственен. Я предполагаю, что всплеск произошел просто из-за усилий по загрузке полной среды рельсов через "бегун рельсов".

Существует ли более эффективный для ЦП способ обработки регулярных пакетных заданий?

P.S. Я знаю, что в конкретном примере отправки напоминания по электронной почте в момент времени X в будущем я мог бы задержать выполнение заданий и просто запланировать работу на будущее. Не все возможные задачи очень хорошо вписываются в структуру delayed_jobs, поэтому я ищу более традиционное решение типа «cron job». Как "рельсовый бегун", но без сумасшедших последствий для процессора.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Вы можете использовать рабочих, которые не загружают рельсы env. Или загрузите его только один раз (например, resque )

0 голосов
/ 16 сентября 2011

Я не думаю, что есть решение для этого, так как вам нужно загрузить среду Rails для обработки всего, что вы обрабатываете. Поэтому, когда вы используете модель "cron", вы запускаете обработчик, который, в свою очередь, создает некоторую нагрузку на ваш экземпляр. Я не знаю, как облачные сервисы поддаются этому, но я думаю, что оптимальной моделью в вашем случае было бы наличие работающего демона для обработки задания и разветвления в сочетании с REE для выполнения задания (что помогает предотвратить утечки памяти, позволяя как можно больше происходит в дочернем процессе, который умрет в конце цикла выполнения).

Демон может быть настроен на прием сигналов (также через очередь заданий), которые будут выделять задания, выполняющие определенные действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...