1

我从使用 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 的请求模块处理。

4

2 回答 2

2

正如 robertklep 所建议的,这是 SO 在打开太多传出连接时耗尽虚拟端口的问题。按照他的链接获取详细说明。

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

于 2013-06-08T10:23:43.670 回答
0

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

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

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

[xxx@xxx~]$sysctl -p

于 2014-03-17T09:10:09.383 回答