我收到以下非常恼人的错误:
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是一个问题;我该如何解决这个问题?感谢。
答案 0 :(得分:1)
从我发现的情况来看,当一些错误发生时会发生,而某些文件没有关闭(当然这是一个错误)。在我的例子中,node-postgres错误导致(奇迹般地)耗尽可用描述符。当我删除导致db错误的代码时,EMFILE消失了。
我想它可以在node.js代码中修复 - 它应该在垃圾收集时关闭文件对象。虽然可能会发生这些丢失的文件描述符仍然被其他东西锁定。
答案 1 :(得分:1)
我经历了很多资源,但相关答案在快递文档中:
Class A {
... };
Class B {
... };
Class HardwareDriver {
public:
int accessHardware();
};
A a;
B b;
HardwareDriver hd;
pthread_t aThread;
pthread_t bThread;
main() {
pthread_create(&aThread, NULL, &A::startA, &a);
pthread_create(&bThread, NULL, &B::startB, &b);
while (...) { };
return 0;
}
它真的有很多帮助,特别是很多缓存命中解释,它根本不打开文件。