有时候我遇到以下错误:
Error: EMFILE, too many open files '/Users/blagus/Gallery/Websites/Nicsware/Pills/resources/core/auth.node.js'
at Object.fs.openSync (fs.js:427:18)
at Object.fs.readFileSync (fs.js:284:15)
at Object.Module._extensions..js (module.js:473:44)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at instController (/Users/blagus/Gallery/Websites/Nicsware/Pills/engine/mvc.node.js:79:31)
at init (/Users/blagus/Gallery/Websites/Nicsware/Pills/engine/mvc.node.js:57:8)
at route (/Users/blagus/Gallery/Websites/Nicsware/Pills/engine/dispatcher.node.js:268:36)
Run Code Online (Sandbox Code Playgroud)
调用此文件的代码行(mvc.node.js:79)是
this.currentRoute.class = require( controllerFile )[dispatchClass].bind( this );
Run Code Online (Sandbox Code Playgroud)
(这是我正在创建的框架)
如您所见,文件auth.node.js由REQUIRE调用,因此具有gracefullFS和类似的给定解决方案不适合.此外,这个问题仅限于MacOS.在Ubuntu似乎工作得很好.
有什么想法吗?
awo*_*ngh 53
这对我有用:
ulimit -n 10480
Run Code Online (Sandbox Code Playgroud)
K M*_*lam 43
您可以通过增加maxfiles限制来解决此问题:
launchctl limit maxfiles 16384 16384 && ulimit -n 16384
Run Code Online (Sandbox Code Playgroud)
aqm*_*aqm 19
我有这个错误,ulimit和launchclt对我不起作用,
这个解决方案来自http://yabfog.com/blog/2014/10/22/yosemite-upgrade-changes-open-file-limit为我工作
echo kern.maxfiles=65536 | sudo tee -a /etc/sysctl.conf
echo kern.maxfilesperproc=65536 | sudo tee -a /etc/sysctl.conf
sudo sysctl -w kern.maxfiles=65536
sudo sysctl -w kern.maxfilesperproc=65536
ulimit -n 65536 65536
Run Code Online (Sandbox Code Playgroud)
然后把
ulimit -n 65536 65536
Run Code Online (Sandbox Code Playgroud)
进入〜/ .bashrc
干杯
蚂蚁
bh4*_*4th 11
我正在使用watchman. 这为我修复了这个错误。值得尝试!!!
brew update
brew install watchman
Run Code Online (Sandbox Code Playgroud)
您的代码打开了太多文件.默认情况下,OS X限制为256个同时打开的文件.当您的代码需要一个新模块时,节点必须打开该文件才能读取它.如果您已经处于此限制,则节点的要求无法继续并将引发错误.您应该在应用程序中审核调用fs.open的位置,并确保正确关闭所有这些文件.如果您尝试同时执行太多文件系统读取,则可能还会遇到此问题,因为每个挂起的读取都将是一个打开的文件.我在使用fs.watchFile时也遇到了这个问题,这也需要打开文件的句柄.
其他答案都不适合我。这做到了:
launchctl limit maxfiles 16384 16384
Run Code Online (Sandbox Code Playgroud)
另请注意,这不会跨会话保存,因此除非您想为每个 bash 终端会话运行它,否则我建议通过执行此操作将上述行放在您的 ~/.bashrc(或 ~/.zshrc,如果您使用 zsh)中在命令行:
vi ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48599 次 |
| 最近记录: |