2016-11-21 60 views
0

我收到此错误。当一个人登录到应用程序时,使用utilityWrapper将日志输入到文件中。当应用程序中发生某些活动时,该文件将被读取/写入。然后突然过了一段时间错误:产生EMFILE节点js

'throw errnoException(process._errno, 'spawn'); 
Error: spawn EMFILE 
    at errnoException (child_process.js:988:11) 
    at ChildProcess.spawn (child_process.js:935:11) 
    at Object.exports.spawn (child_process.js:723:9) 
    at Object.Logger (/web/utilityWrapper.js:21:17) 
    at process.env.NODE_TLS_REJECT_UNAUTHORIZED (/web/server.js:141:17) 
    at process.EventEmitter.emit (events.js:95:17) 
    at process._fatalException (node.js:272:26) 

这个错误出现了。 请帮帮我。

+0

EMFILE通常意味着您的主机已经用尽了可用的套接字(这与系统中同时打开的文件类似)。这个错误与NodeJS没有直接关系,而是与UNIX相关。更多关于这里:http://blog.izs.me/post/56827866110/wtf-is-emfile-and-why-does-it-happen-to-me。 但是,如果它发生在纯系统上,没有任何特殊的配置到'ulimit',我会怀疑你可能递归地打开文件或者在代码中的某个循环中打开文件,并且这个循环没有停止条件(因此你的Node.JS进程打开太多文件)。 – SzybkiSasza

回答

1

这是由于各种原因发生的。代码中有很多console.log,它们在运行服务器的命令提示符上打印了很多东西。在写入文件时,它正在使用文件描述符(fd)。文件描述符的ulimit是1024 使用命令

lsof - -i -n -P | grep nodejs 

我能捕捉到有关每个fd的信息。 Fd当用户登录到应用程序时用于增加count。ldap套接字和mysql db连接也消耗大量的fd's。 所以,当你遇到这种错误时,请记住这些要点。