2

我在一台服务器上运行三个 node.js 应用程序,都使用 Foreman 通过 always.js 启动应用程序。

零负载下,我的一个应用程序始终抛出错误Error: watch EMFILE并重新启动。尽管不断抛出该错误,但该应用程序仍然有效......我试图找到有关此错误的更多信息,但那里没有很多信息(“打开的文件太多”或“增加 ulimit”。)

我的问题是:为什么这会发生在空闲的Web 应用程序上 - 为什么只有三分之一?它什么也没做... 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
4

1 回答 1

8

我没有使用 always.js 的经验,但使用 fs.watch 命令的其他节点实用程序遇到了类似的错误,而 fs.watch 命令又使用 linux 的 inotify API。

您可能想尝试检查 inotify 的设置:

cat /proc/sys/fs/inotify/max_user_instances

如果文件存在,将其设置为更高的值可能会有所帮助:

echo 8704 > /proc/sys/fs/inotify/max_user_instances
于 2012-04-25T20:13:35.480 回答