Предотвращение использования фоновыми заданиями delayed_job слишком большого количества ЦП на одном сервере

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

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

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

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


person Olly    schedule 27.08.2009    source источник


Ответы (1)


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

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

ruby script/delayed_job -e production -n 2 start

пытаться:

nice -n 15 ruby script/delayed_job -e production -n 2 start
person molf    schedule 27.08.2009
comment
Бонусные баллы, если кто-нибудь сможет понять это, используя delayed_job_args с Capistrano. - person Chuck Bergeron; 06.03.2012
comment
Он не использует delayed_job_args, но выполняет свою работу: stackoverflow.com/a/9928720/359957 - person James Chevalier; 18.04.2014