У меня есть сайт с относительно низким объемом трафика, который обычно обслуживают 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