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)
Ответы
Ответ 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