Docker在高负载时阻塞传出连接?

jom*_*omo 19 sockets tcp http docker dokku

我们有一个node.js Web服务器,它向外部API发出一些传出的http请求.它使用dokkudocker中运行.
经过一段时间的加载(30req/s)后,这些传出请求不再得到响应.

这是我用常量req/s测试时的图表: 图形 incoming并且outgoing是并发请求的数量(不是初始化请求的数量).(在图表中很难看到,但每次约10次请求时它相当稳定.)
response time仅适用于外部请求.你可以清楚地看到他们突然失败(达到1000毫秒超时).


我们发送的req/s越多,我们遇到这个问题的速度就越快,所以我们必须有一些限制,我们越来越接近每个请求.


netstat -ant | tail -n +3 | wc -l在主机上用来获取开放连接的数量,但它只有~450(大多数TIME_WAIT).这不应该达到套接字限制.我们也没有达到任何RAM或CPU限制.


我也尝试在docker之外的同一台机器上运行相同的应用程序,它只发生在docker中.

Mar*_*can 4

这可能是由于 Docker 用户态代理造成的。如果您正在运行最新版本的 Docker,请尝试使用该选项运行守护--userland-proxy=false程序。这将使 Docker 仅使用 iptables 处理端口转发,并且开销更少。