我在一台服务器上运行三个node.js应用程序,全部使用Foreman通过always.js启动应用程序。
在零加载下,我的一个应用程序始终抛出错误Error: watch EMFILE
并重新启动。该应用程序仍然工作,尽管经常抛出该错误...我试图找到有关此错误的更多信息,但那里没有很多(“太多文件打开”或“增加ulimit“。)
我的问题是:为什么会在空闲网络应用程序上发生这种情况 - 为什么只有三分之一?它没有做任何事......这是always.js的一个问题吗? (有两个其他节点应用程序始终在这台机器上运行...)只是找一些关于导致此错误的信息,如果它是严重的,以及如何解决它。
谢谢!
仅供参考,这是控制台的相关摘录:
01:17:07 web.1 | app listening on http://0.0.0.0:5000
01:17:07 web.1 | NODE_ENV = development
01:17:07 web.1 | opened connection to database!
01:17:07 web.1 | [always] Error: watch EMFILE
01:17:07 web.1 | [always] Error: watch EMFILE
01:17:07 web.1 | at errnoException (fs.js:636:11)
01:17:07 web.1 | at FSWatcher.start (fs.js:663:11)
01:17:07 web.1 | at Object.watch (fs.js:691:11)
01:17:07 web.1 | at Object.oncomplete (/home/jesse/local/nodev0.6.14/lib/node_modules/always/lib/monitor.js:62:36)
01:17:07 web.1 | [always] Restarting app.js with Node
答案 0 :(得分:8)
我没有使用always.js的经验,但是与使用fs.watch命令的其他节点实用程序有类似的错误,后者又使用了linux的inotify API。
您可能想尝试检查inotify的设置:
cat /proc/sys/fs/inotify/max_user_instances
如果文件存在,将其设置为更高的值可能会有所帮助:
echo 8704 > /proc/sys/fs/inotify/max_user_instances