Ich habe einige Lasttests mit wrk
meinem Nginx-Reverse-Proxy durchgeführt -> mein Web-App-Setup und ich habe festgestellt, dass Nginx ab 1000 gleichzeitigen Verbindungen 502s und die folgende Fehlermeldung zurückgibt:
2015/04/17 20:45:26 [crit] 6068#0: *1116212677 connect() to \
127.0.0.1:3004 failed (99: Cannot assign requested address) \
while connecting to upstream, client: xxx.xxx.xx.165, server: \
foo.bar.com, request: "GET /my/route HTTP/1.1", upstream: \
"http://127.0.0.1:3004/my/route", host: "foo.bar.com"
der wrk
befehl lautete:
wrk -t10 -c500 -d5m "https://foo.bar.com/my/route" -H "Accept: application/json"
Ich versuche herauszufinden, was hier falsch gelaufen sein könnte. Meine Webanwendung wartet auf Anfragen, die von nginx an Port 3004 weitergeleitet werden. Läuft nginx über keine Ports mehr? Ist die Webanwendung nicht in der Lage, diese vielen Anfragen zu bearbeiten? Werden Anfragen abgelaufen? Ich bin mir nicht sicher und würde gerne mehr darüber erfahren.
nginx
reverse-proxy
port
load-testing
resources
Alexandr Kurilin
quelle
quelle
Antworten:
Bereits hier beantwortet: https://stackoverflow.com/questions/14144396/nginx-proxy-connect-to-ip80-failed-99-cannot-assign-requested-address
Die Meldung weist darauf hin, dass Ihnen die lokalen Sockets / Ports ausgehen.
Versuchen Sie, die Netzwerkgrenzen zu erhöhen:
Alternativ können Sie Unix-Sockets ausprobieren, um festzustellen, ob dies hilfreich ist.
quelle
Übersicht über Netzwerk-Sockets Wenn eine Verbindung über TCP hergestellt wird, wird sowohl auf dem lokalen als auch auf dem Remote-Host ein Socket erstellt. Die Remote-IP-Adresse und der Remote-Port gehören zur Serverseite der Verbindung und müssen vom Client festgelegt werden, bevor er die Verbindung überhaupt herstellen kann. In den meisten Fällen wählt der Client automatisch, welche lokale IP-Adresse für die Verbindung verwendet werden soll. Manchmal wird sie jedoch von der Software ausgewählt, die die Verbindung herstellt. Schließlich wird der lokale Port zufällig aus einem definierten Bereich ausgewählt, der vom Betriebssystem zur Verfügung gestellt wird. Der Port wird dem Client nur für die Dauer der Verbindung zugeordnet und wird daher als kurzlebig bezeichnet. Wenn die Verbindung beendet wird, kann der kurzlebige Port wieder verwendet werden.
Lösung Aktivieren von Keepalive-Verbindungen
Verwenden Sie die Keepalive-Direktive, um Keepalive-Verbindungen von NGINX zu Upstream-Servern zu aktivieren. Definieren Sie dabei die maximale Anzahl von Keepalive-Verbindungen im Leerlauf zu Upstream-Servern, die im Cache jedes Arbeitsprozesses erhalten bleiben. Wenn diese Anzahl überschritten wird, werden die zuletzt verwendeten Verbindungen geschlossen. Ohne Keepalives erhöhen Sie den Aufwand und sind sowohl bei Verbindungen als auch bei kurzlebigen Ports ineffizient.
mehr: https://www.nginx.com/blog/overcoming-ephemeral-port-exhaustion-nginx-plus/
quelle