¿Cuánta memoria usa un socket de flujo inet en Node.js?

Por supuesto, los datos se pueden almacenar en búfer y crecer si el cliente es demasiado lento para leer las escrituras del servidor [1].

Pero, ¿cuál es el tamaño de búfer predeterminado? Supongo que es lo que esté configurado en / proc / sys / net / ipv4 / tcp_rmem y tcp_wmem (asumiendo Linux) ...

Estoy intentando hacer una planificación de capacidad básica. Si tengo un VPS con 512 MB de RAM, y supongo que el sistema operativo y otros usarán ~ 100 MB, mi aplicación tiene ~ 400 MB para lo que quiera hacer. Si cada cliente conectado (conector TCP / IP antiguo normal) requiere, por ejemplo, 8 KB (lectura de 4 KB, escritura de 4 KB) de forma predeterminada, tengo capacidad para 400 MB / 8 KB = ~ 50000 clientes.

[1] http://nodejs.org/docs/v0.4.7/api/all.html#socket.bufferSize

preguntado el 16 de mayo de 11 a las 19:05

Realmente no creo que debas preocuparte por los detalles aquí. Estás en el estadio correcto, y si el número exacto es 25,000 o 40,000 o 60,000, una vez que alcances ese número de simultáneo usuarios, podrá permitirse un poco más de memoria en su VPS: P Además, en esos números comienza a tener problemas con el sistema operativo que tiene demasiadas conexiones abiertas -

Sí, por supuesto que es cierto. Solo estoy tratando de obtener una cantidad de referencia de conexiones máximas / host. Mi plan es tener varios de estos hosts y dirigir a los clientes al host menos cargado cuando el cliente quiera conectarse al "clúster". Pero necesitaré saber cuándo necesito más hosts orientados al cliente. Seguro que se necesitan un promedio de carga y otras métricas, pero mi aplicación no está muy vinculada a la CPU, por lo que el factor dominante para decidir cuándo y cómo crecer es la RAM. ¡Gracias! -

1 Respuestas

No lo sé de la parte superior de mi cabeza y probablemente varía de una plataforma a otra, ¡pero así es como puede averiguarlo!

Usa este código:

var net = require('net');

net.createServer(function (socket) {
    socket.on('data', function(data) {
      console.log('chunk length: ' + data.length);
    });
}).listen(function() {
    console.log("Server listening on %j", this.address());
});

Y luego coloque un archivo grande (como un ISO) a través de 'nc localhost $ port' usando el número de puerto que escupe el script cuando se inicia, y observe la salida para ver cuál es el tamaño de fragmento más grande. En mi máquina OS X, parece que el búfer más grande es de 40960 bytes, pero podría ser diferente en el suyo.

contestado el 17 de mayo de 11 a las 03:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.