У нас есть веб-сервер node.js, который делает некоторые исходящие HTTP-запросы внешним API. Он работает в докере, используя dokku.
После некоторого времени загрузки (30 секунд/с) эти исходящие запросы больше не получают ответов.
Здесь график, который я сделал при тестировании с постоянным req/s:
incoming
и outgoing
- количество одновременных запросов (а не количество инициализированных запросов). (Трудно видеть на графике, но он довольно постоянный при ~ 10 запросах для каждого.) response time
предназначен только для внешних запросов.
Вы можете ясно видеть, что они начинают внезапно проваливаться (поражая наш тайм-аут 1000 мс).
Чем больше req/s мы отправляем, тем быстрее мы сталкиваемся с этой проблемой, поэтому у нас должен быть какой-то предел, с которым мы приближаемся к каждому запросу.
Я использовал netstat -ant | tail -n +3 | wc -l
на хосте, чтобы получить количество открытых соединений, но это было всего ~ 450 (большинство из них TIME_WAIT
). Это не должно превышать ограничение на сокет. Мы также не сталкиваемся с ограничениями на ОЗУ или ЦП.
Я также попробовал запустить одно и то же приложение на одной машине снаружи докера, а это только в докере.