Подтвердить что ты не робот

Что оптимальное значение для пассажира Phusion PassengerMaxRequestQueueSize

Я знаю, что это зависит от аппаратного обеспечения окна, но, например, если установлено 100 процессов, то очередь по умолчанию также равна 100. Имеет ли смысл увеличивать PassengerMaxRequestQueueSize до 200 или 300? Наверное, это зависит от свободной памяти. Мысли?

Лучший ответ будет объяснять настройку и, возможно, один или два примера, если серверные запросы обрабатываются в течение 2-3 секунд.

Спасибо заранее!

4b9b3361

Ответ 1

Почему вы должны ограничить очередность

Любые запросы, которые не сразу обрабатываются приложением, помещаются в очередь. Очередь обычно плохая: она часто означает, что ваш сервер не может обрабатывать запросы достаточно быстро.

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

Таким образом, наличие лимита в очереди - это хорошо. Это ограничивает влияние вышеуказанной ситуации.

Вы должны убедиться, что запросы поставлены в очередь как можно меньше. Это может означать:

  • Быстрое добавление приложения (если ваша рабочая нагрузка связана с ЦП).
  • Обновление до более быстрого оборудования (если ваша рабочая нагрузка связана с ЦП).
  • Увеличение настроек вашего приложения concurrency (если ваша рабочая нагрузка связана с I/O), например. путем увеличения количества процессов или потоков.

Если вы не можете помешать запросам в очереди, то лучше всего держать очередь в очереди и отображать дружественное сообщение об ошибке при достижении предела очереди. Что-то вроде: "Нам очень жаль, многие люди навещают нас прямо сейчас. Повторите попытку позже". Документация для PassengerMaxRequestQueueSize сообщает вам, как это сделать.

Оптимальное значение для размера очереди

Трудно сказать, какой должен быть оптимальный размер очереди. Хорошее эмпирическое правило: установите размер очереди запросов на максимальное количество запросов, которые вы можете обрабатывать за одну секунду. В зависимости от вашей ситуации вам, возможно, придется немного подкорректировать вещи.

Это эмпирическое правило исходит из понятия ожидаемого пакетного трафика. Сколько одновременных запросов вы ожидаете на своем сервере?

Предположим, что размер вашей очереди равен 100, и по какой-либо причине вы получаете 150 запросов одновременно. Предположим, что ваш сервер достаточно быстр, чтобы обрабатывать 150 запросов за полсекунды, поэтому вы знаете, что это не проблема производительности. Но если у вас размер очереди запросов 100, то 50 из этих запросов будут удалены с ошибкой "Очередь запроса полностью".

В такой ситуации вы должны установить размер очереди на максимальное количество одновременных запросов, которые, по вашему мнению, можно безопасно обрабатывать без проблем с производительностью.

Ответ 2

Этот вопрос, и Пассажирские документы здесь рассказывают больше о работе с это. Если вам нужна дополнительная информация о том, почему это происходит на вашем сервере, вы можете попробовать запустить passenger-status (обычно вам нужно запустить это как root).

Если вы хотите настроить страницу пользовательских ошибок, когда посетители видят эту проблему, вы можете использовать следующее (в Apache) для установки страницы пользовательских ошибок:

PassengerErrorOverride on
ErrorDocument 503  /error503.html

Как упоминалось в Хунли, вы также можете изменить параметр PassengerMaxRequestQueueSize на большее число, чтобы добавить в очередь больше запросов. Вы также можете установить это значение в 0 и отключить его (для большинства ситуаций это не оптимальное решение).

Для справки, сообщение об ошибке по умолчанию, которое посетитель на вашем сайте увидит, когда сталкивается с этим ограничением:

This website is under heavy load

We're sorry, too many people are accessing this website at the same time. We're working on this problem. Please try again later.