Re: Большая дисперсия времени выполнения запросов

Gena Makhomed gmm at csdoc.com
Tue Aug 19 13:27:11 UTC 2014


On 19.08.2014 15:10, yury_y wrote:

> столкнулся со следующей проблемой. Сервер работает под нагрузкой порядка
> 300-400 запросов в минуту.
> Из статистики времени выполнения запросов видно, что в некоторых случаях
> "быстрые" запросы, которые обычно занимают несколько миллисекунд, могут
> выполняться по несколько секунд.
> Для иллюстрации проблемы можно рассмотреть такой пример.
>
> Выполняется GET запрос "http://127.0.0.1:777/fcgi/auth..."(без ssl, без
> поиска в dns, сервер слушает на localhost) с локального клиента(на том же
> сервере).
> Запрос, который обычно занимает меньше миллисекунды, в данном случае
> занимает 130 миллисекунд.
>
> Здесь краткая хронология событий из tcpdump-а:
> 16:18:43.095716 - клиент отправляет запрос nginx-у
> 16:18:43.225903 - nginx отправляет запрос upstream-у
> 16:18:43.226178 - upstream отвечает nginx-у
> 16:18:43.226235 - nginx отвечает клиенту
>
> Таким образом upstream отвечает по запрос менее чем за миллисекунду, но 130
> миллисекунд уходит на то чтобы прочесть клиентский запрос и переслать его в
> upstream.
> Такое же поведение наблюдается и при отдаче статики.
>
> Кто-нибудь сталкивался с подобными проблемами? В каком направлении можно
> копать?

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

1) может помочь увеличение количества worker`ов nginx

2) если OS FreeBSD - там можно попробовать aio режим для статики.
на Linux aio режим пока что имеет смысл использовать только для очень
больших файлов, которые в любом случае не помещаются в файловый кеш.

3) ускорить отдачу динамики можно, если, например, использовать
два разных экземпляра nginx - для отдачи статики и динамики.

11.11.11.11:80 www.example.com - динамика, проксирование запросов
22.22.22.22:80 example.com - статика

тот nginx, который работает для динамики -
не будет блокироваться на дисковых операциях,
а при работе с сетью worker`ы nginx не блокирутся.

4) добавить в сервер еще памяти, чтобы увеличился дисковый кеш

5) использовать SSD вместо HDD для всей отдаваемой сервером статики

6) если используются сторонние модули - причина может быть в них.

7) более точно узнать причину задержек поможет
http://nginx.org/ru/docs/debugging_log.html

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru