【发布时间】:2012-05-08 11:44:23
【问题描述】:
我最近收到了大量运行 Node.js 的网站的流量。随着交通量的增加,它开始出现很多崩溃,这是以前从未发生过的。我的日志中出现以下错误:
{ [Error: connect EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'connect' }
Error: connect EMFILE
at errnoException (net.js:670:11)
at connect (net.js:548:19)
at net.js:607:9
at Array.0 (dns.js:88:18)
at EventEmitter._tickCallback (node.js:192:40)
有人知道它为什么会崩溃吗?以及如何解决它的想法?
我正在使用 Express.js 和 Socket.io。它在 Ubuntu 上运行。
【问题讨论】:
-
EMFILE错误表示操作系统拒绝您的程序打开更多文件/套接字,请查看:stackoverflow.com/q/34588/511300 -
谢谢斯图尔!更改 ulimit 解决了它。
-
不客气!添加它作为答案,所以你可以accept它。
-
我想说,这个问答绝对值得MORE 次观看,甚至与Hello World 一样多。开发人员按需打开并发套接字without any limitation,然而,他们不知道这意味着允许大量打开套接字的请求会导致他们的应用程序崩溃并搞砸所有事情。 没有警告,即使它可能是一个严重的漏洞。 在学习如何使用
forever之前,必须告知开发人员。 -
为了防止您的应用程序因大量连接而崩溃,首先,确定没有资源泄漏——您的应用程序不建立和保持不必要的连接;其次,选择limit your available concurrent sockets 或increase the OS's opened-socket limit。
标签: node.js express socket.io connect