Предотвращение фоновых заданий delayed_job от чрезмерной загрузки ЦП на одном сервере - PullRequest
2 голосов
/ 27 августа 2009

В приложении My Rails есть ряд задач, которые выгружаются в фоновые процессы, такие как изменение размера изображения и выгрузка на S3. Я использую delayed_job для управления этими процессами.

Эти процессы, в частности миниатюры PDF-файлов (с помощью Ghostscript) и изменение размера изображений (с помощью ImageMagick), требуют значительных ресурсов ЦП и часто занимают 100% времени ЦП. Поскольку эти задания выполняются на том же сервере (RedHat Linux), что и само веб-приложение, а также БД, они могут привести к тому, что наше веб-приложение не отвечает.

Одним из решений является получение другого сервера, на котором будут выполняться только фоновые задания. Я думаю, это было бы оптимальным решением? Однако, поскольку это не то, что я могу сделать немедленно, я задаюсь вопросом, можно ли каким-то образом заставить фоновые задания работать с более низким приоритетом операционной системы и, следовательно, потреблять меньше циклов ЦП при выполнении своей работы?

Мысли оценены.

1 Ответ

5 голосов
/ 27 августа 2009

Если я не ошибаюсь, delayed_job использует рабочие процессы, которые будут обрабатывать все фоновые задания. Должно быть легко изменить приоритет планирования процесса для процесса при его запуске.

Так, например, вместо:

ruby script/delayed_job -e production -n 2 start

попробовать:

nice -n 15 ruby script/delayed_job -e production -n 2 start
...