我的节点应用程序正在向两个服务器发出请求,A和B到服务器A,它等待一个请求完成,然后再发出下一个请求。对于服务器B,它在不等待的情况下每秒发出20个请求。当我向服务器B发出请求时,对服务器A的请求需要很长时间。当我不向服务器B提出请求时,它们就会快速运行。对服务器B的请求堆积如山,但同时处理的只有几百个。
我运行了完全相同的应用程序,在Joyent smartos实例上运行了相同的节点版本,而且我没有这个问题,所以我假设这是操作系统集的限制,而不是节点集的限制。在节点中,我确实将maxSockets设置为10000,如这里所解释的,http://markdawson.tumblr.com/post/17525116003/node
我正在运行我的应用程序与暴发户,但我不知道我是否有问题,没有它(这将是我的下一个测试)。在我的upstart配置文件中,我有限制nofile 90000 90000。有一些其他的限制我可以提高,如这里所记录的,http://upstart.ubuntu.com/wiki/Stanzas#limit,但我不知道他们做什么。其中一个会导致问题吗?我的Ubuntu机器的极限还在哪里呢?
我应该补充说,我正在启动通过Monit的新贵程序,以防与此相关。
发布于 2014-12-30 00:56:05
您没有提到如何与ServerA或ServerB对话,但Node的HTTP库默认限制为每台主机(协议/服务器/端口)组合6个连接。您可以使用http.globalAgent.maxSockets = 20;或任何您想要的最大值来增加这个值。
其他问题可能与操作系统中打开文件/套接字限制有关.你想看看/proc/sys/fs/file-max而不是
来自最近linux/Documentation/sysctl/fs.txt:
file-max & file-nr: 内核动态地分配文件句柄,但到目前为止还没有释放它们。 文件-max中的值表示Linux内核将分配的文件句柄的最大数量。当您收到大量关于文件句柄耗尽的错误消息时,您可能希望增加此限制。 历史上,file-nr中的三个值表示分配的文件句柄的数量、已分配但未使用的文件句柄的数量以及文件句柄的最大数量。Linux2.6总是将0作为空闲文件句柄的数量来报告--这不是一个错误,它只是意味着分配的文件句柄的数量与使用的文件句柄的数量完全匹配。 尝试分配比文件-max更多的文件描述符是用printk报告的,查找"VFS: file-max限制达到“。
特别是Ubuntu,如果您有大量的ufw (防火墙)和/或iptables规则到位,这也可以产生效果。
https://stackoverflow.com/questions/26879466
复制相似问题