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 mailing list
[email protected]
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить