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

Докер блокирует исходящие соединения при высокой нагрузке?

У нас есть веб-сервер node.js, который делает некоторые исходящие HTTP-запросы внешним API. Он работает в докере, используя dokku.
После некоторого времени загрузки (30 секунд/с) эти исходящие запросы больше не получают ответов.

Здесь график, который я сделал при тестировании с постоянным req/s: graphincoming и outgoing - количество одновременных запросов (а не количество инициализированных запросов). (Трудно видеть на графике, но он довольно постоянный при ~ 10 запросах для каждого.)
response time предназначен только для внешних запросов. Вы можете ясно видеть, что они начинают внезапно проваливаться (поражая наш тайм-аут 1000 мс).


Чем больше req/s мы отправляем, тем быстрее мы сталкиваемся с этой проблемой, поэтому у нас должен быть какой-то предел, с которым мы приближаемся к каждому запросу.


Я использовал netstat -ant | tail -n +3 | wc -l на хосте, чтобы получить количество открытых соединений, но это было всего ~ 450 (большинство из них TIME_WAIT). Это не должно превышать ограничение на сокет. Мы также не сталкиваемся с ограничениями на ОЗУ или ЦП.


Я также попробовал запустить одно и то же приложение на одной машине снаружи докера, а это только в докере.

4b9b3361

Ответ 1

Это может быть связано с прокси-сервером Docker. Если вы используете последнюю версию Docker, попробуйте запустить демон с опцией --userland-proxy=false. Это заставит Docker обрабатывать переадресацию порта только с помощью iptables, и накладные расходы меньше.