Wir haben einen node.js-Webserver, der einige ausgehende HTTP-Anfragen an eine externe API sendet. Es läuft in Docker mit dokku.
Nach einiger Ladezeit (30 req/s) bekommen diese ausgehenden Anfragen keine Antworten mehr.Docker blockiert ausgehende Verbindungen bei hoher Auslastung?
Hier ist ein Diagramm, habe ich während mit konstanter req/s testen: incoming
und outgoing
die Menge gleichzeitiger Anforderungen ist (nicht die Anzahl der initialisierten Anfragen). (Es ist schwer zu sehen in der Grafik, aber es ist ziemlich konstant bei ~ 10 Anfragen für jeden.)
response time
ist nur für externe Anfragen. Sie können deutlich sehen, dass sie auf einmal (schlagen unsere 1000ms Timeout) starten.
Je mehr erf/s wir, desto schneller können wir in dieses Problem senden laufen, also müssen wir eine Art Grenze haben wir immer näher an mit jeder Anforderung.
I verwendet netstat -ant | tail -n +3 | wc -l
auf dem Host die Anzahl der offenen Verbindungen zu bekommen, aber es war nur ~ 450 (die meisten von ihnen TIME_WAIT
). Das sollte nicht das Socket-Limit treffen. Wir treffen auch keine RAM- oder CPU-Grenzen.
Ich versuchte auch außerhalb Docker die gleiche Anwendung auf der gleichen Maschine laufen und es geschieht nur in Docker.
Haben Sie versucht, es in Docker laufen aber nicht in Dokku? – blacklabelops
Definieren Sie "aktuell bearbeitet". 1000ms ist viel zu kurz für eine Anfrage Timeout. Probier etwas Sinnvolles wie zehn Sekunden. – EJP
@maybeg Ich habe nicht, weil die Dokku Jungs mir gesagt haben, dass sie keine Netzwerk-Dinge berühren. Ich werde das später versuchen. – jomo