Сколько памяти использует сокет потока inet в Node.js? - PullRequest
3 голосов
/ 16 мая 2011

Конечно, данные могут буферизироваться и увеличиваться, если клиент слишком медленно читает записи сервера [1].

Но каков размер буфера по умолчанию?Я предполагаю, что все, что настроено в / proc / sys / net / ipv4 / tcp_rmem и tcp_wmem (при условии Linux) ...

Я пытаюсь выполнить базовое планирование емкости.Если у меня VPS с 512 МБ ОЗУ, и я предполагаю, что ОС и др. Будут использовать ~ 100 МБ, у моего приложения будет ~ 400 МБ для всего, что он хочет сделать.Если каждому подключенному клиенту (обычному старому сокету TCP / IP) требуется по умолчанию 8 КБ (чтение 4 КБ, запись 4 КБ), у меня есть емкость на 400 МБ / 8 КБ = ~ 50000 клиентов.

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

1 Ответ

1 голос
/ 17 мая 2011

Я не знаю, от всей головы, и, вероятно, это зависит от платформы к платформе, но вот как вы можете узнать!

Используйте этот код:

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());
});

Изатем проследите за большим файлом (например, ISO) через 'nc localhost $ port', используя номер порта, который выдает сценарий при запуске, и просмотрите выходные данные, чтобы увидеть, какой наибольший размер чанка.На моей машине с OS X похоже, что самый большой буфер составляет 40960 байт, но он может отличаться на вашем.

...