节点:100个并发请求大大减慢了服务器的速度。 O.S问题?

时间:2014-11-12 04:48:04

标签: node.js performance ubuntu-14.04 upstart monit

我的节点应用程序正在向两个服务器A和B发出请求。对于服务器A,它在下一个请求之前等待一个请求完成。对于服务器B,它每秒发出20个请求而无需等待。当我向服务器B发出请求时,对服务器A的请求需要很长时间。当我不向服务器B发出请求时,它们会很快进行。对服务器B的请求堆积起来,但同时处理的进程不超过几百个。

我运行完全相同的应用程序,在Joyent智能手机实例上使用相同的节点版本,我没有这个问题,因此我认为操作系统设置的限制存在问题,而不是限制那个节点设置。在节点I中,将maxSockets设置为10000,如此处所述,http://markdawson.tumblr.com/post/17525116003/node

我正在使用upstart运行我的应用程序虽然我不知道没有它我是否有问题(这将是我的下一个测试)。在我的upstart配置文件中,我有限制nofile 90000 90000.我可以提出一些其他限制,如此处所述http://upstart.ubuntu.com/wiki/Stanzas#limit,但我不知道他们做了什么。其中一个可能导致问题吗?还有什么地方可以设置我的Ubuntu机器的限制?

我应该补充一点,我是通过Monit启动新手计划的,如果相关的话。

1 个答案:

答案 0 :(得分:0)

您没有提到如何与ServerA或ServerB通信,但Node的HTTP library默认限制为每个主机(协议/服务器/端口)组合六个连接。您可以使用http.globalAgent.maxSockets = 20;或任何您想要的最大值来增加此值。

其他问题可能与您的操作系统中的打开文件/套接字限制有关...您想要查看/proc/sys/fs/file-max而不是

来自最近的linux / Documentation / sysctl / fs.txt:

  

file-max&文件-NR:

     

内核动态分配文件句柄,但是它还没有再释放它们。

     

file-max中的值表示Linux内核将分配的最大文件句柄数。当您收到大量关于用完文件句柄的错误消息时,您可能希望增加此限制。

     

历史上,file-nr中的三个值表示已分配文件句柄的数量,已分配但未使用的文件句柄数以及最大文件句柄数。 Linux 2.6总是报告0作为空闲文件句柄的数量 - 这不是错误,它只是意味着分配的文件句柄数与使用的文件句柄数完全匹配。

     

使用printk报告尝试分配的文件描述符多于file-max,查找“VFS:达到文件最大限制”。


特别是对于Ubuntu,如果你有很多ufw(防火墙)和/或iptables规则,这也会影响到它。