Назад | Перейти на главную страницу

Passenger + Rails + Global Queues - Можете ли вы направлять конкретные запросы в определенные очереди?

У меня есть сайт с относительно низким объемом трафика, который обычно обслуживают 3 или 4 пассажира.

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

----------- General information ------
max      = 18                                       
count    = 18                                       
active   = 17                                       
inactive = 1                                        
Waiting on global queue: 115                        

Через пятнадцать минут, после перезапуска apache для очистки очереди, все вернется в норму:

----------- General information -----------
max      = 18
count    = 4
active   = 0
inactive = 4
Waiting on global queue: 0

----------- Application groups -----------
/apps/mailapp/current:
  App root: /apps/mailapp/current
  * PID: 31044   Sessions: 0    Processed: 275     Uptime: 14m 21s
  * PID: 31047   Sessions: 0    Processed: 314     Uptime: 14m 21s
  * PID: 31060   Sessions: 0    Processed: 284     Uptime: 14m 17s

Я увеличил максимальное количество экземпляров до 18 (примерно столько, сколько может одновременно работать на VPS), что немного помогло, но не сильно. Я максимально оптимизировал запрос (с 30 секунд до 15-20 секунд).

Поскольку запросы, вызывающие резервное копирование, автоматизированы, нет необходимости обслуживать их особенно своевременно. Есть ли способ выделить несколько экземпляров пассажира, которые просто обслуживают этот конкретный запрос? (возможно, на основе пути URL).

Я вроде как исправил это.

Я создал новый виртуальный хост с apache с ограничениями на максимальное количество экземпляров.

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

Это вызвало несколько похожую проблему, касающуюся использования процессора на хосте с символической ссылкой: Apache / Passenger и cpulimit