【问题标题】:Node.js maxing out at 1000 concurrent connectionsNode.js 最大并发连接数为 1000
【发布时间】:2013-06-10 22:07:51
【问题描述】:

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

无论我们使用什么大小的实例,Node 似乎总是在 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);

Node 应该能够处理的不止这些对吗?任何想法将不胜感激。

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

【问题讨论】:

  • 你最终获得了多少并发连接?在什么 EC2 实例上?
  • @user3526 抱歉没有看到这个。我们这样做是为了校准潜力,看看我们的应用程序的并发连接是否有意义,然后确定在横向扩展期间使用的最佳实例大小,因为我们的应用程序每天要处理数以百万计的请求。已经很长时间了(显然),但我认为我们在一个小型(单核)上达到了 3k 或 4k,并且随着我们扩大实例大小,每个核心的速度下降了一点。当然,从那时起,ec2 已经更改了所有实例的规范。

标签: node.js amazon-web-services


【解决方案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 });

【讨论】:

  • 谢谢,但是文件描述符已经升级到 65096
  • 我们试了一下,它成功了! Daniel 你知道为什么通过 etc/security/limits.conf 设置 ulimit 不起作用但使用 posix 可以吗?
  • 登录时应用限制。如果您没有退出 shell,然后在编辑 /etc/security/limits.conf 后重新登录,那么您会看到旧的限制。您可以使用ulimit -a查看当前限制
  • 想通了。我们通过 monit & upstart 启动节点。 Upstart 有单独的 nofile 默认值(显然与操作系统无关)。所以设置 Upstart config limit nofile 值解决了这个问题。 Posix 工作的原因是因为 posix 启动了一个不受 Upstart 限制的新进程
【解决方案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

【讨论】:

  • 谢谢。在测试之前我们已经将文件描述符提升到 65096(软、硬和系统范围)
猜你喜欢
  • 1970-01-01
  • 2013-03-30
  • 2013-09-29
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多