Wie überprüfe ich die Anzahl der offenen Verbindungen in node.js?

8

Ich habe eine Maschine, auf der node.js (v0.1.32) mit einem tcp-Server (tcp.createServer) und einem http-Server (http.createServer) läuft. Der HTTP-Server wird von langen Polling-Anfragen (die jeweils 50 Sekunden dauern) von einer Komet-basierten Anwendung auf Port 80 getroffen. Und es gibt tcp-Socket-Verbindungen an Port 8080 von einer iPhone-Anwendung für den gleichen Zweck.

Es wurde festgestellt, dass der Server für eine Weile nicht mehr Verbindungen (insbesondere die tcp-Verbindungen, während die HTTP-Verbindungen in Ordnung waren !! ??) handhaben konnte und nach einem Neustart normal war.

Für den Lasttest der Verbindungen habe ich einen TCP-Server erstellt und 2000 Anfragen erzeugt und festgestellt, dass die Verbindungen nach Erreichen der maximalen Dateideskriptorgrenze auf dem Computer fehlschlagen (Standard 1024). Was ist eine wirklich sehr kleine Zahl.

Also, eine Anfängerfrage hier: Wie skaliere ich meine Anwendung, um mehr Verbindungen auf node.js zu behandeln und wie ich dieses Problem behandle.

Gibt es eine Möglichkeit herauszufinden, wie viele aktive Verbindungen im Moment vorhanden sind?

Danke Sharief

    
Sharief Shaik 09.07.2010, 16:05
quelle

2 Antworten

3

Hey Joey! Ich war auf der Suche nach einer Unix-Lösung, mit der ich herausfinden konnte, wie viele offene Verbindungen zu einem bestimmten Zeitpunkt jederzeit auf meinem Computer bestehen. Der Grund war, dass mein Server Anfragen nach einer bestimmten Anzahl von Verbindungen nicht verarbeiten konnte. Und stellte fest, dass mein Computer nur 1024 offene Verbindungen gleichzeitig verarbeiten kann, d. H. Den ulimit-Dateideskriptorwert, der standardmäßig auf 1024 gesetzt ist. Ich habe diesen Wert geändert, indem ich ulimit -n gesetzt habe, das meiner Anforderung entspricht.

Um die offenen Verbindungen zu überprüfen, habe ich lsof benutzt, das mir die Liste der geöffneten Dateien gibt und wie viele Verbindungen über jeden Port geöffnet sind, den ich benutzt habe.

    
Sharief Shaik 15.07.2010, 06:11
quelle
2

Ich weiß nicht, ob es eine eingebaute Möglichkeit gibt, die Anzahl der aktiven Verbindungen mit Node zu erhalten, aber es ist ziemlich einfach, etwas einzurichten.

Für meine Kometen-ähnliche Knoten-App behalte ich ein Objekt, dem ich Verbindungen hinzufüge, als eine Eigenschaft. Alle X Sekunden Iteriere ich über dieses Objekt und sehe, ob es irgendwelche Verbindungen gibt, die geschlossen werden sollten (in deinem Fall alles, was über die Grenze von 50 Sekunden hinaus geht).

Wenn Sie eine Verbindung schließen, löschen Sie einfach diese Eigenschaft von Ihrem Verbindungsobjekt. Dann können Sie jederzeit sehen, wie viele Verbindungen mit Object.size(connections)

geöffnet sind     
joeynelson 14.07.2010 14:24
quelle