在Linux下,TCP client重复连接服务端一个端口,出现Error: connect EMFILE错误
发布于 1年前 作者 qianqing 1183 次浏览

用nodejs的net模块写一个客户端,连接其他主机的一个端口并发送一包数据,然后断开。在进行压力测试的时候,出现Error: connect EMFILE错误,有人遇到过吗

13 回复

超過1024 file descriptor , 請搜ulimit

client.write(str); client.end(); 这种写法是不是已经正常关闭连接了?? write方法不能写成下面这样吗: client.write(string,function(){ … });

Linux 对用户文件打开数量有限制的,默认貌似是1024个,你可以通过更改这个限制再做压力测试。使用linux 命令 ulimit 查看一下。client.end()方法确实socket已经断开了

可能是因为你断开是在回调里 才断开。你的程序流程可能是先建立了n多连接后,再一个个断开。先建立n个连接的时候就已经超过了 nodejs的连接限制。

end之后应该不用再对socket做什么操作用来释放什么的吧?

ulimit一般改成多少比较合适

client.on('connect’,function(){ client.write(str); client.end(); }); 我的代码是上面这样的,end确实是放在‘connect’时间的回调里,这样写有什么问题吗?

@qianqing 这是在connect event完成时触发 你怎能确保在connect完成之前没有超过1024个连接请求?

@asoedarren 不能保证,所以只能修改ulimit吗?

@qianqing 这个看自己的服务器配置,还有你自己的服务器支持多少人连接。http://www.hackbase.com/tech/2012-05-16/66485.html 访问一下这个地址,对这个讲解的比较全

@qianqing 如果你想彻底释放,可以调用destroy()方法把这个socket销毁;一般服务器端才这样做,客户端就一个连接,不会影响的

回到顶部