Подтвердить что ты не робот

Node.js maxing out при 1000 одновременных подключений

Мы сравниваем производительность node с использованием простого сервера Hello World node на AWS (EC2).

Независимо от того, какой экземпляр размера, который мы используем node, всегда отображается максимум на 1000 одновременных подключений (это НЕ 1000 в секунду, но 1000 он может обрабатывать в 1 раз). Вскоре после этого CPU всплескивает и node в основном замерзает.

Node 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);

Node должен иметь возможность обрабатывать больше, чем это правильно? Любые мысли были бы весьма признательны.

Также файловые дескрипторы (soft, hard, system) установлены на 65096)

4b9b3361

Ответ 1

Используйте модуль posix, чтобы повысить лимит количества файловых дескрипторов, которые может использовать ваш процесс.

Установить posix

npm install posix

Затем в вашем коде, который запускается при запуске приложения...

var posix = require('posix');

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

Ответ 2

Вы достигли ограничения по умолчанию для дескрипторов файлов, которые может использовать процесс (1024). Вы можете проверить лимит в командной строке, запустив "ulimit -n". Чтобы изменить лимит, вам необходимо отредактировать файл /etc/security/limits.conf. Добавьте следующий блок:

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

"*" применяется ко всем пользователям, кроме root. Пределы для root должны добавляться отдельно. Есть мягкий и жесткий предел. Пользователям разрешено изменять собственные ограничения до мягкого предела, но не превышать жесткие ограничения.

Как только файл будет отредактирован, выйдите из системы и снова зайдите в него. Проверьте изменение, запустив ulimit -n. Перезагрузите процесс Node, и вам должно быть хорошо.

Также существует системный ограничитель дескриптора файла, который можно увеличить с помощью следующей команды:

sysctl -w fs.file-max=65535