针对大量出站HTTP请求优化Node.js?

时间:2012-08-30 16:33:29

标签: node.js

我的node.js服务器遇到缓慢或无响应的时间,甚至偶尔会在尝试连接服务器时导致503网关超时。

我99%肯定(根据我已经运行的测试),这种滞后来自于我使用node-oauth module与外部API(Facebook,Twitter和Google)联系的大量出站请求很多其他的)。无可否认,正在进行的出站请求数量相对较大(每分钟大约30个左右)。更糟糕的是,这经常意味着对我的服务器的相应入站请求可能需要大约5-10秒才能完成。但是,我有一个以前用于PHP编写的API版本,它能够处理这一数量的出站请求而没有任何问题。实际上,使用我的Node.js API的相同数量(甚至更少)请求的CPU使用率大约是我的PHP API的5倍。

所以,我试图找出可以改进的地方,最重要的是要确保不会发生503超时。以下是我读过或试验过的一些内容:

  • article (by LinkedIn)建议关闭套接字池。但是,当我联系流行的nodejs-request module的作者时,他的回答是这是一个非常糟糕的主意。
  • 我听说过将“http.globalAgent.maxSockets”设置为大量可以提供帮助,事实上它似乎确实减少了我的瓶颈

我可以继续,但简而言之,我已经能够找到关于如何优化性能的非常简明的信息,因此这些出站连接不会滞后来自客户端的入站请求。

提前感谢任何想法或贡献。

FWIW,我也在使用express和mongoose,我的服务器托管在Amazon Cloud上(2x M1.Large用于节点服务器,2x负载均衡器和3x M1.Small MongoDB实例)。

2 个答案:

答案 0 :(得分:2)

对我来说,代理正在将您的请求限制为每个主机的默认级别为5。你的测试显示,启动代理maxSockets帮助......你应该这样做。

您可以通过启动数据包嗅探器或向应用程序添加更多调试代码来证明这是问题,以证明这是限制因素。

答案 1 :(得分:-1)