Ответ 1
Почему вы должны ограничить очередность
Любые запросы, которые не сразу обрабатываются приложением, помещаются в очередь. Очередь обычно плохая: она часто означает, что ваш сервер не может обрабатывать запросы достаточно быстро.
Большая очередь означает, что запросы с меньшей вероятностью будут удалены. Но это связано с недостатком: во время занятости, чем больше очередь, тем дольше ваши посетители должны ждать, пока они не заметят ответ. Это заставляет их нажимать перезагрузку, делая очередь еще длиннее (их предыдущий запрос останется в очереди, ОС не знает, что они отключены, пока не попытается отправить данные обратно посетителю), или заставит их покинуть очередь разочарование.
Таким образом, наличие лимита в очереди - это хорошо. Это ограничивает влияние вышеуказанной ситуации.
Вы должны убедиться, что запросы поставлены в очередь как можно меньше. Это может означать:
- Быстрое добавление приложения (если ваша рабочая нагрузка связана с ЦП).
- Обновление до более быстрого оборудования (если ваша рабочая нагрузка связана с ЦП).
- Увеличение настроек вашего приложения concurrency (если ваша рабочая нагрузка связана с I/O), например. путем увеличения количества процессов или потоков.
Если вы не можете помешать запросам в очереди, то лучше всего держать очередь в очереди и отображать дружественное сообщение об ошибке при достижении предела очереди. Что-то вроде: "Нам очень жаль, многие люди навещают нас прямо сейчас. Повторите попытку позже". Документация для PassengerMaxRequestQueueSize сообщает вам, как это сделать.
Оптимальное значение для размера очереди
Трудно сказать, какой должен быть оптимальный размер очереди. Хорошее эмпирическое правило: установите размер очереди запросов на максимальное количество запросов, которые вы можете обрабатывать за одну секунду. В зависимости от вашей ситуации вам, возможно, придется немного подкорректировать вещи.
Это эмпирическое правило исходит из понятия ожидаемого пакетного трафика. Сколько одновременных запросов вы ожидаете на своем сервере?
Предположим, что размер вашей очереди равен 100, и по какой-либо причине вы получаете 150 запросов одновременно. Предположим, что ваш сервер достаточно быстр, чтобы обрабатывать 150 запросов за полсекунды, поэтому вы знаете, что это не проблема производительности. Но если у вас размер очереди запросов 100, то 50 из этих запросов будут удалены с ошибкой "Очередь запроса полностью".
В такой ситуации вы должны установить размер очереди на максимальное количество одновременных запросов, которые, по вашему мнению, можно безопасно обрабатывать без проблем с производительностью.