NodeJS负载测试性能不佳(EADDRNOTAVAIL)

时间:2013-06-03 18:32:06

标签: node.js http express

我开始使用NodeJS的Web应用程序,我的应用程序有一个问题,我不知道如何解决。

应用程序(我们使用expressjs)在我的本地机器上运行顺畅但是,当我们将它部署到我们的开发服务器进行负载测试时,我们收到这样的错误

Error: connect EADDRNOTAVAIL at errnoException (net.js:770:11) at connect (net.js:646:19) at Socket.connect (net.js:711:9) at asyncCallback (dns.js:68:16) at Object.onanswer [as oncomplete] (dns.js:121:9) GET XXXXXXX 500 21ms

我们的应用程序没有数据库,它处理Rest API后端。我们构建的每个页面都需要对我们的后端进行一次或多次调用。我知道我们必须使用缓存系统,但我们想在没有它的情况下进行测试。

我们的负载测试模拟用户导航。它从5个用户开始,每分钟添加另一个用户。当我们有超过25个用户时,我们会在日志中看到错误。

一开始我认为这可能是一个关于太多开放连接的问题,但我们的系统管理员说并非如此。

所以,如果有人能暗示我应该在哪里看,那就太好了。

编辑:我们的开发机器有16个内核,我们正在使用集群模块运行我们的应用程序。通过流行的Mikael请求模块处理对后端的调用。

2 个答案:

答案 0 :(得分:2)

正如robertklep所说,这是在打开太多传出连接时SO耗尽虚拟端口的问题。按照他的link进行详细解释。

当我增加端口时,文章说我仍然遇到了问题。通过一些谷歌搜索,我发现垃圾收集器和节点网络对象的问题。当你需要许多传出连接时,手动处理垃圾收集器似乎是一个好主意。 看看这个post

答案 1 :(得分:0)

如果您确定它不是程序问题,您可以更改linux系统配置来解决此问题:

[xxx @ xxx~] $ vim /etc/sysctl.conf

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

[xxx @ xxx~] $ sysctl -p