Node.js最大为1000个并发连接

jad*_*ent 35 amazon-web-services node.js

我们使用AWS(EC2)上的简单Hello World节点服务器对节点性能进行基准测试.

无论我们使用什么大小的实例节点总是出现在1000个并发连接上(这不是每秒1000次,而是1000次它可以一次处理).不久之后,CPU峰值和节点基本冻结.

节点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);
Run Code Online (Sandbox Code Playgroud)

节点应该能够处理超过这个正确吗?任何想法将不胜感激.

文件描述符(软,硬,系统)也设置为65096)

Dan*_*iel 36

使用该posix模块可以提高进程可以使用的文件描述符数量的限制.

安装 posix

npm install posix
Run Code Online (Sandbox Code Playgroud)

然后在您启动应用程序时运行的代码中...

var posix = require('posix');

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

  • 弄清楚了.我们通过monit&upstart开始节点.Upstart有单独的nofile默认值(显然无论操作系统如何).因此,设置Upstart配置限制nofile值可以解决问题.Posix工作的原因是因为posix推出了一个不受Upstart限制的新流程 (7认同)
  • 登录时应用限制.如果您没有注销shell,然后在编辑/etc/security/limits.conf后重新登录,那么您将看到旧的限制.您可以使用`ulimit -a`检查当前限制 (3认同)

Bad*_*yon 12

您已达到进程可以使用的文件描述符的默认限制(1024).您可以通过运行"ulimit -n"来检查命令行上的限制.要更改限制,您需要编辑/etc/security/limits.conf.添加以下块:

* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
Run Code Online (Sandbox Code Playgroud)

"*"适用于除root之外的所有用户.root的限制必须单独添加.有软和硬限制.允许用户将自己的限制更改为软限制但不超过硬限制.

文件编辑完成后,再次注销并重新登录.通过运行ulimit -n验证更改.重新启动Node进程,你应该好好去.

还可以使用以下命令增加系统范围的文件描述符限制:

sysctl -w fs.file-max=65535
Run Code Online (Sandbox Code Playgroud)