Docker阻塞高负载的传出连接?

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

下面是我用常量req / s进行testing时所做的一个图表: 图形 incomingoutgoing是并发请求的数量(不是初始化请求的数量)。 (在图中很难看出来,但是在每次约10个请求时它是相当稳定的。)
response time仅适用于外部请求。 你可以清楚地看到,他们突然开始失败(我们的1000毫秒超时)。


我们发送的请求越多,遇到这个问题的速度就越快,所以我们必须对每个请求都有一些限制。


我使用了netstat -ant | tail -n +3 | wc -l netstat -ant | tail -n +3 | wc -l netstat -ant | tail -n +3 | wc -l在主机上获得打开的连接数,但是只有〜450(大部分是TIME_WAIT )。 这不应该达到套接字限制。 我们也没有达到任何内存或CPU的限制。


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

这可能是由于Docker用户级代理。 如果您正在运行最新版本的Docker,请尝试使用--userland-proxy=false选项运行守护进程。 这将使得Docker只用iptables处理端口转发,开销较小。