Re: Соединение с Upstream занимает 1 секунду.
Maxim Dounin
mdounin на mdounin.ru
Пт Ноя 17 14:18:57 UTC 2017
Hello!
On Fri, Nov 17, 2017 at 07:50:30AM -0500, KycKyc wrote:
> Здравствуйте, столкнулся со следующей проблемой.
> Связка nginx + uwsgi, на продакшн сервере соединение с
> upstream($upstream_connect_time) занимает 1 секунду (+-3ms), бывает раз в
> 20-30 запросов проскакивает запрос с временем соединения в 0 сек,
> промежуточных значений замечено небыло.
> Запросы логируются только с 1го IP.
> Upstream обслуживает http API.
>
> Статика отдается моментально.
> Соединение с websocket upstream (тоже uwsgi) сервером занимает 0 секунд.
>
> Так же, в системном журнале никаких предупреждений нет.
>
> В чем может быть проблема ?
>
> nginx.conf:
> https://pastebin.com/WipnHPkd
>
> Конфиг сервера:
> https://pastebin.com/bfVCxP78
>
> Текущий stub_status:
> Active connections: 19993
> server accepts handled requests
> 359071 359071 1362273
> Reading: 0 Writing: 10343 Waiting: 9639
>
>
> Для примера залогировал один запрос.
>
> Nginx debug log:
> https://pastebin.com/sN30E6Ye
>
> tcpdump:
> https://imgur.com/a/ntC4h
Если верить дампу, то между установлением соединения прошло меньше
1 миллисекунды. Если верить логу - больше 1 секунды. При этом
ip-адреса в дампе и в логе - не совпадают.
Я тут вижу два варианта:
- либо дамп не от того запроса,
- либо дамп не полный и за секунду до этого был ещё один
SYN-пакет, который почему-то в дамп не попал.
Вообще, судя по описанным симптомам - проблему надо искать на
стороне бэкенда, скорее всего он просто перегружен и не успевает
отвечать на запросы. В результате первый SYN он просто игнорирует
из-за переполнения очереди соединений (ибо Linux, и
net.ipv4.tcp_abort_on_overflow по умолчанию 0), соединение
устанавливается только после повторной отправки SYN'а - и вот она, 1
секунда задержки на любой коннект к перегруженному бэкенду.
Так что рекомендация простая: смотреть внимательно на бэкенд, в
частности - на его listen queue ("ss -nlt" в помощь). Ну и дальше
решать проблему с загрузкой бэкенда.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru