2014-01-21 24 views
0

嗨,大家好我有一个用Express.js编写的应用程序,Im使用socket.io向用户显示实时数据。Node.js,path.js在很多用户连接到应用程序后崩溃

当有更多的则是让说,10个用户在网站上突然节点服务器崩溃,并即时得到这个错误

path.js:309 var path = (i >= 0) ? arguments[i] : process.cwd(); 

即使我一个人在网站上,我刷新页面多次,或者只是留在网站上,并点击页面我得到同样的错误,有谁知道如何解决这个问题?

编辑:这是整个错误

path.js:309 
     var path = (i >= 0) ? arguments[i] : process.cwd(); 
               ^
Error: EMFILE, too many open files 
    at Object.exports.resolve (path.js:309:52) 
    at ExpressHandlebars.extend.loadTemplate (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/lib/express-handlebars.js:111:25) 
    at ExpressHandlebars.load (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/lib/express-handlebars.js:153:18) 
    at /Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:224:13 
    at /Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:108:13 
    at Array.forEach (native) 
    at _each (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:32:24) 
    at async.each (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:107:9) 
    at _asyncMap (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:223:9) 
    at Object.map (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:201:23) 
    at ExpressHandlebars.mapTemplates (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/lib/express-handlebars.js:157:19) 
    at fn (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:579:34) 
    at Object._onImmediate (/Users/sredoje/Downloads/expressjs-template/node_modules/express3-handlebars/node_modules/async/lib/async.js:495:34) 
    at processImmediate [as _immediateCallback] (timers.js:330:15) 
>> application exited with code 
+0

这是整个错误吗? – Joe

+0

@Joe我添加了完整的错误信息发布 –

+0

你有多少个模板? – Joe

回答

2

检查了这一点:https://github.com/paulmillr/chokidar/issues/45

看起来就像是一个“打开的文件太多”的错误,这可能发生,如果您的应用程序正在与文件系统中的大量文件进行交互。你没有指出你的平台是什么,我假设Linux,通过链接建议的修复是提高你的限制。

完整引述修复:

EMFILE意味着有太多打开的文件。早午餐看着你所有的项目文件,通常是一个相当大的数字。您可以使用命令ulimit -n <number>(10000应该足够)将最大打开的文件数设置为更大的数字来修复此错误。

+0

我已经做到了,并将最大文件夹到2400,它帮助,但什么是生产的解决方案,我不想让我的网站崩溃时,有很多用户连接? –

+0

重写您的应用程序以访问更少的文件?这里没有足够的信息来提供真正的分析,说明你为什么要使用这么多的文件,以及它是否是固有的必要条件,尽管在生产中将你的限制提高到10000是不成问题的。这里有一个通用的建议:如果你要为同一个文件维护多个文件句柄,每个用户一个文件句柄,那么你可以重写它,以便它只维护一个文件句柄并在需要访问该文件时重新使用它。有可能node或者linux足够聪明来优化那些,我不知道,但是值得一看。 – Jason

+0

应该用grunt uglify,把一切都放在一个文件中解决这个问题?例如,我只是app.js –