Javascript Node.js、path.js在大量用户连接到应用程序后崩溃

Javascript Node.js、path.js在大量用户连接到应用程序后崩溃,javascript,node.js,express,path.js,Javascript,Node.js,Express,Path.js,大家好,我有一个用Express.js编写的应用程序,我使用socket.io向用户显示实时数据 当有超过10个用户在网站上突然节点服务器崩溃,我得到这个错误 path.js:309 var path = (i >= 0) ? arguments[i] : process.cwd(); 即使我独自一人在网站上,我多次刷新页面,或者只是停留在网站上点击页面,我也会遇到同样的错误,有人知道如何解决这个问题吗 编辑:这就是全部错误 path.js:309 var path = (i

大家好,我有一个用Express.js编写的应用程序,我使用socket.io向用户显示实时数据

当有超过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 
8查看以下内容:

看起来这是一个“打开的文件太多”错误,如果您的应用程序与文件系统中的大量文件交互,则可能会发生此错误。你没有指明你的平台是什么,我假设是Linux,下面通过链接建议的修复程序就是升级你的ulimit

完整引用的修复程序:

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


这就是全部错误吗?@Joe我在帖子中添加了完整的错误消息。你有多少个模板?@Joe大约10个。这是多少?不,我想知道你是否做了一些奇怪的事情,导致模板不断加载/重新加载。你能给我看一下相关的代码吗?我已经这样做了,并将max files设置为2400,这很有帮助,但生产的解决方案是什么,我不想我的网站在有很多用户连接时崩溃?重写你的应用程序以访问更少的文件?这里没有足够的信息来提供一个真正的分析,说明为什么要使用这么多的文件,以及它是否有内在的必要性,尽管在生产中将ulimit增加到10000应该不是一个问题。这里有一个通用的建议:如果您要为同一个文件维护多个文件句柄,每个用户一个,那么您可以重写它,使它只维护一个文件句柄,并在需要访问该文件时重新使用它。我不知道,node或linux可能足够智能,可以对其进行优化,但值得一看?例如,我只需要app.jsI不知道,同样,我不知道您如何或为什么访问一堆文件。但是如果很容易尝试的话,试一下,将ulimit设置回1000(默认值),运行你的丑陋代码,看看文件包含是否是你遇到问题的地方。还有一件事,当我键入sudo ulimit-n 10000,然后键入ulimit-a时,我打开了文件(-n)999