2

我收到以下非常烦人的错误:

Error: EMFILE, too many open files '/home/savagegames.net/views/index.jade'
at Object.openSync (fs.js:240:18)
at Object.readFileSync (fs.js:128:15)
at View.contents (/home/savagegames.net/node_modules/express/lib/view/view.js:121:13)
at Function.compile (/home/savagegames.net/node_modules/express/lib/view.js:68:45)
at ServerResponse._render (/home/savagegames.net/node_modules/express/lib/view.js:417:18)
at ServerResponse.<anonymous> (/home/savagegames.net/node_modules/express/lib/view.js:318:17)
at /home/savagegames.net/node_modules/express-mongoose/index.js:45:21
at resolve (/home/savagegames.net/node_modules/express-mongoose/index.js:75:12)
at ServerResponse.expressmongoose [as render] (/home/savagegames.net/node_modules/express-mongoose/index.js:37:12)
at /home/savagegames.net/controllers/index_controller.coffee:49:18

我认为这是 Express 的问题;我该如何补救?谢谢。

4

2 回答 2

1

根据我的发现,当发生一些错误并且某些文件没有关闭时会发生这种情况(当然这是一个错误)。就我而言,node-postgres 错误导致(奇迹般地)耗尽了可用的描述符。当我删除导致数据库错误的代码时,EMFILE 消失了。

我想它可以在 node.js 代码中修复 - 它应该在垃圾收集时关闭文件对象。尽管可能会发生这些丢失的文件描述符仍然被其他东西锁定的情况。

于 2012-08-26T12:49:46.657 回答
1

我浏览了很多资源,但相关答案在 express 文档中:

app.enable('view cache')

它确实有很大帮助,尤其是很多缓存命中说明,它根本没有打开文件。

于 2017-05-26T10:30:43.903 回答