Node.js 节点:100秒的同时请求大大降低了服务器的速度。O.S问题?

Node.js 节点:100秒的同时请求大大降低了服务器的速度。O.S问题?,node.js,performance,ubuntu-14.04,upstart,monit,Node.js,Performance,Ubuntu 14.04,Upstart,Monit,我的节点应用程序正在向两个服务器A和B发出请求。对于服务器A,它等待一个请求完成,然后再发出下一个请求。对于服务器B,它每秒发出20个请求,无需等待。当我向服务器B发出请求时,向服务器A发出的请求需要很长时间。当我没有向服务器B发出请求时,它们会很快执行。对服务器B的请求堆积如山,但同时处理的请求不超过几百个 我在Joyent smartos实例上运行了完全相同的应用程序,具有相同的节点版本,我没有这个问题,因此我假设这是操作系统设置的限制问题,而不是节点设置的限制问题。在节点中,我将maxSo

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

我在Joyent smartos实例上运行了完全相同的应用程序,具有相同的节点版本,我没有这个问题,因此我假设这是操作系统设置的限制问题,而不是节点设置的限制问题。在节点中,我将maxSockets设置为10000,如下所述

我正在用upstart运行我的应用程序,但如果没有它,我不知道是否有问题(这将是我的下一个测试)。在我的upstart配置文件中,我有一个限制nofile 90000 90000。正如这里所记录的,我还可以提出一些其他限制,但我不知道它们是做什么的。其中一个可能是导致问题的原因吗?我的Ubuntu机器的限制还可以设置在哪里


我应该补充一点,如果相关的话,我将通过Monit启动upstart程序。

您没有提到如何与ServerA或ServerB通信,但是节点的默认限制是每个主机(协议/服务器/端口)组合有六个连接。您可以使用http.globalAgent.maxSockets=20增加该值或任何您希望的最大值

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

从最近的linux/Documentation/sysctl/fs.txt:

文件最大值和文件编号:

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

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

在历史上,file nr中的三个值表示已分配的文件句柄数、已分配但未使用的文件句柄数和最大文件句柄数。Linux 2.6总是将0报告为可用文件句柄数——这不是错误,它只是意味着分配的文件句柄数与使用的文件句柄数完全匹配

试图分配比printk报告的文件最大值更多的文件描述符,请查找“VFS:已达到文件最大值限制”



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

也许你可以试着在serverfault上问这个问题?你可能会接触到一个更具体的同龄人群体,他们可以帮助你解决这个问题。我从来没有遇到过类似的问题。我使用Ubuntu、Debian和CentOS来托管节点应用程序,没有任何问题。您的应用程序是否占用大量内存?你确定你所阐述的问题实际上是根本原因吗。你到底在干什么?问题可能与您刚才演示的内容无关。我怀疑操作系统与此有关。如果您正在使用大量内存,请记住节点有其局限性。谢谢你的建议。我在64位版本上使用了一个gig和一半的内存,这已经不是问题了。除了请求之外,我没有遇到任何缓慢的情况。问题不在于“缓慢”,node.js(或者更确切地说是v8)对内存使用的限制大约为1.5GB,这似乎是在慢慢增加。您是将node.js作为单个进程运行,还是将其分配给机器上的每个处理器和负载平衡?至于内存限制,我不太确定它们是如何工作的,也不确定它们在每个用户之间是否是静态的,这也可能取决于您在node.js中使用的V8版本。检查这个问题是缓慢的。我对服务器的请求需要更长的时间才能完成,即使一切正常。此外,打包到节点0.10中的V8版本具有比您所说的更高的限制,当然64位版本也有。我已经成功地使用了超过8gb的数据。在64位版本中,使用max_old_space_size参数可以将限制提高到相当高的水平。但是,如果你使用了太多特定类型的内存,就会发生其他疯狂的事情。例如,我遇到了一个问题,创建非常大的单个对象会导致内存不足。请记住,在Joyent smartos实例上,请求缓慢不会发生在完全相同的节点版本上。