2016-11-21 96 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。 所以,當你遇到這種錯誤時,請記住這些要點。