sockets http tcp docker dokku

sockets - ¿El docker bloquea las conexiones salientes en carga alta?



http tcp (1)

Tenemos un servidor web node.js que realiza algunas solicitudes http salientes a una API externa. Se está ejecutando en docker utilizando dokku .
Después de un tiempo de carga (30req / s) estas solicitudes salientes ya no están recibiendo respuestas.

Aquí hay un gráfico que hice mientras probaba con constante req / s: incoming y outgoing es la cantidad de solicitudes simultáneas (no la cantidad de solicitudes inicializadas). (Es difícil verlo en el gráfico, pero es bastante constante en ~ 10 solicitudes para cada uno).
response time es solo para solicitudes externas. Puede ver claramente que comienzan a fallar repentinamente (alcanzando nuestro tiempo de espera de 1000 ms).

Cuanto más req / s enviamos, más rápido nos encontramos con este problema, por lo que debemos tener algún tipo de límite al que nos estamos acercando con cada solicitud.

Utilicé netstat -ant | tail -n +3 | wc -l netstat -ant | tail -n +3 | wc -l netstat -ant | tail -n +3 | wc -l en el host para obtener el número de conexiones abiertas, pero solo fue ~ 450 (la mayoría de ellas TIME_WAIT ). Eso no debería llegar al límite de socket. No estamos llegando a ningún límite de RAM o CPU, tampoco.

También intenté ejecutar la misma aplicación en la misma máquina fuera de la ventana acoplable y solo ocurre en la ventana acoplable .


Podría ser debido al proxy de Docker userland. Si está ejecutando una versión reciente de Docker, intente ejecutar el daemon con la --userland-proxy=false . Esto hará que Docker maneje el reenvío de puertos solo con iptables y habrá menos gastos generales.