2013-06-10 11 views
31

Stiamo eseguendo il benchmarking delle prestazioni del nodo utilizzando un semplice server dei nodi Hello World su AWS (EC2).Node.js max. 1000 connessioni simultanee

Indipendentemente dall'istanza di dimensioni che usiamo, il nodo appare sempre come massimo a 1000 connessioni simultanee (questo NON è 1000 al secondo, ma 1000 può essere gestito in 1 volta). Poco dopo la CPU picchietta e il nodo si blocca fondamentalmente.

Nodo v0.10.5

var http = require('http'); 
var server = http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('loaderio-dec86f35bc8ba1b9b604db6c328864c1'); 
}); 
server.maxHeadersCount = 0; 
server.listen(4000); 

nodo dovrebbe essere in grado di gestire più di questo corretto? Qualsiasi pensiero sarebbe molto apprezzato.

Anche i descrittori di file (morbido, duro, di sistema) sono impostati a 65096)

+1

quante connessioni simultanee hai finalmente ottiene? E su quale istanza di EC2? – user3526

+1

scuse @ user3526 non ha visto questo. lo stiamo facendo per calibrare il potenziale per verificare se le connessioni simultanee della nostra app avevano senso e quindi determinare la migliore dimensione dell'istanza da utilizzare per il prezzo durante la scalabilità poiché la nostra app stava elaborando centinaia di milioni di richieste al giorno. È passato molto tempo (ovviamente), ma penso che abbiamo ottenuto fino a 3k o 4k su un piccolo (che era single core) e si è ridotto un po 'per core mentre abbiamo ridimensionato le dimensioni dell'istanza. Naturalmente ec2 ha cambiato le specifiche su tutte le istanze da allora. – jadent

risposta

28

utilizzare il modulo posix di aumentare il limite al numero di descrittori di file il processo può utilizzare.

Installare posix

npm install posix 

Poi nel codice che viene eseguito quando si avvia la vostra applicazione ...

var posix = require('posix'); 

// raise maximum number of open file descriptors to 10k, 
// hard limit is left unchanged 
posix.setrlimit('nofile', { soft: 10000 }); 
+0

grazie ma i descrittori di file sono già stati alzati a 65096 – jadent

+0

abbiamo dato a questo una prova e ha funzionato! Daniel sai perché impostare ulimit via etc/security/limits.conf non funziona ma usare posix fa? – jadent

+2

I limiti sono applicati al login. Se non si è effettuato il logout dalla shell e successivamente si è ripristinato dopo aver modificato /etc/security/limits.conf, si vedrebbero i vecchi limiti. Puoi controllare i limiti attuali con 'ulimit -a' – Daniel

10

Hai raggiunto il limite predefinito di descrittori di file un processo può utilizzare (1024). È possibile controllare il limite sulla riga di comando eseguendo "ulimit -n". Per cambiare il limite, è necessario modificare /etc/security/limits.conf. Aggiungere il blocco di seguito:

* soft nofile 65535 
* hard nofile 65535 
root soft nofile 65535 
root hard nofile 65535 

"*" si applica a tutti gli utenti tranne root. I limiti per root devono essere aggiunti separatamente. Ci sono limiti rigidi e rigidi. Gli utenti sono autorizzati a modificare i propri limiti fino al limite flessibile, ma non oltre il limite rigido.

Una volta che il file è stato modificato, disconnettersi e rientrare di nuovo. Verifica la modifica eseguendo ulimit -n. Riavvia il tuo processo Node e dovresti essere pronto.

C'è anche un limite descrittore di file a livello di sistema che può essere aumentata con il seguente comando:

sysctl -w fs.file-max=65535 
+0

Grazie. Abbiamo già aumentato i descrittori di file a 65096 prima dei test (sia Soft, Hard che System Wide) – jadent

Problemi correlati