2016-07-11 13 views
2

ich eine App auf meinem eigenen zu bauen und ich mag es 10K gleichzeitige Verbindungen zu handhaben10K gleichzeitige Verbindungen mit nginx

Hosted auf zwei ubuntu 14.04 Server mit nginx (über lokale Maschine und Johannis Skript getestet) Reverse Proxy und NodeJS App Server.

Derzeit bekomme ich etwa 3,3K gleichzeitige Benutzer vor einem Spike von 500 Verbindung Fehler fallen.

Ich habe den Lastenausgleich zwischen Portverbindungen erreicht, indem ich die App auf zwei separaten Ports ausgeführt und eine Upstream-Anweisung verwendet habe, um Anfragen über Ports zu verteilen.

Dies hat jedoch keine nachgewiesene Verbesserung in meinen Zahlen gezeigt.

Frage:

  1. Ich weiß, dass es eine Menge an Informationen fehlt hier (Ich stelle mir vor, wie viel Bandbreite jeder Benutzer erfordert). Wie gehe ich vor, um die richtigen Informationen zu sammeln, um das zu entscheiden?

  2. Welche andere Option kann ich in Betracht ziehen/lernen/implementieren, um den größtmöglichen Gewinn bei möglichen gleichzeitigen Benutzern zu generieren?

Vielen Dank!

+0

Haben Sie festgestellt, ob das Verbindungsproblem von Nginx oder Knoten stammt? Vielleicht möchten Sie im Grunde alles, was die Knoten-App tut, ausstechen, um zu sehen, ob das Problem verschwindet, was darauf hinweist, dass das Problem von Ihrer Geschäftslogik herrührt. Vielleicht möchten Sie auch die Leistung in Bezug auf Speicher, Disc, CPU-Nutzung verfolgen. – AlexMA

+0

Wie gehe ich den Ursprung des Verbindungsabfalls herausfinden? –

+0

Sie müssen versuchen, die Dinge zu regeln, wie Sie einen schwierigen Fehler machen würden.Versuchen Sie, Dinge aus der Gleichung zu nehmen, zunächst große Dinge. Wenn Sie den Knoten einfach aus der Gleichung entfernen können (versuchen Sie zum Beispiel 10k statische Dateien gleichzeitig von nginx zu liefern, so dass der Knoten nicht einmal benutzt wird). Wenn das funktioniert, liegt das Problem wahrscheinlich bei Knoten und nicht bei nginx. Wenn es immer noch Verbindungen löscht, dann kann nginx oder ein Hardwareproblem das Problem sein, und Sie können von dort fortfahren. – AlexMA

Antwort

0

Wenn in Ihrem nginx-Protokoll viele "Too many open files" -Fehler angezeigt werden, liegt dies daran, dass Sie das Limit von gleichzeitig geöffneten Sockets erreicht haben, die derzeit auf dem Server festgelegt sind.

Möglicherweise müssen Sie die Nutzungsbeschränkung (ULimit) für den nginx-Benutzer und wahrscheinlich auch für den Knoten-App-Benutzer erhöhen. Dies ist das erste Problem, das ich jedes Mal, wenn ich einen Test nginx + nodejs geladen habe. (https://www.cyberciti.biz/faq/linux-unix-nginx-too-many-open-files/)

ULimit

Der Befehl ulimit gibt Ihnen die Grenzen des aktuellen Benutzers, so dass Sie es laufen, während auf dem nginx Benutzer verbunden

# su in the user nginx 
su - nginx 
ulimit -Hn 
ulimit -Sn 

# or 
su nginx --shell /bin/bash --command "ulimit -Hn" 
su nginx --shell /bin/bash --command "ulimit -Sn" 

Wir haben es in der Regel ändern in/etc/Sicherheit/limits.conf

sudo vi /etc/security/limits.conf 

# Add the following lines 
nginx  soft nofile 30000 
nginx  hard nofile 30000 
# Save 

# Reload (I think rebooting here is the best way) 
sysctl -p 

nginx.conf

Danach haben Sie

die Grenze an der nginx Software-Ebene in der nginx Konfigurationsdatei setzen
sudo vi /etc/nginx/nginx.conf 

# Add this line at the root of the config 
worker_rlimit_nofile 30000; 

# Reload (This will fail if you have SELinux enabled) 
sudo nginx -s reload 

SELinux

die nginx App zu ermöglichen, seine eigene Grenze setzen Sie SELinux Bool einstellen:

setsebool httpd_setrlimit on 
sudo nginx -s reload