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