如何检查node.js中的打开连接数?

时间:2010-07-09 16:05:35

标签: javascript comet node.js file-descriptor evented-io

我有一台运行node.js(v0.1.32)的机器,带有tcp服务器(tcp.createServer)和http服务器(http.createServer)。 http服务器受到来自端口80上的基于彗星的应用程序的长轮询请求(每个持续50秒)的影响。并且在i80应用程序的端口8080上存在用于相同目的的tcp套接字连接。

发现服务器无法处理更多连接(特别是tcp连接,而http连接看起来很好!! ??)一段时间后才恢复正常。

对于连接的负载测试,我创建了一个tcp服务器并生成了2000个请求,并发现在达到机器上的最大文件描述符限制后连接开始失败(默认为1024)。这是一个非常小的数字。

所以,这里有一个新手问题:如何扩展我的应用程序以处理node.js上更多的连接以及我如何处理这个问题。

有没有办法找出目前有多少活动连接?

由于 沙里夫

3 个答案:

答案 0 :(得分:3)

嘿乔伊!我正在寻找一个unix解决方案,它可以帮助我在我的机器上随时查看特定时刻的打开连接数。原因是我的服务器在一定数量的连接后无法处理请求。并且认为我的机器一次只能处理1024个打开的连接,即ulimit文件描述符值,默认为1024.我已经通过设置适合我的要求的ulimit -n修改了这个值。

因此,检查我使用lsof的打开连接,它给出了打开文件的列表,并计算了通过我使用的每个端口打开了多少连接。

答案 1 :(得分:2)

我不知道是否有一种内置方法可以获得与Node的活动连接数,但是很容易安装。

对于我的彗星式节点应用程序,我保留一个对象,我将连接添加为属性。每隔X秒,我会遍历该对象并查看是否有任何应该关闭的连接(在您的情况下,任何超过50秒限制的连接)。

关闭连接时,只需从连接对象中删除该属性即可。然后,您可以使用Object.size(connections)

随时查看已打开的连接数

答案 2 :(得分:1)

您可以通过以下方法获得连接计数:

var server = http.createServer(app);     
server.getConnections(function(error, count) {
    console.log(count); 
});

使用此方法可以继续检查连接,当连接超过阈值时,再关闭以前的连接。希望能帮助到你。