2

1 つのサーバーで 3 つの node.js アプリケーションを実行しています。すべて Foreman を使用して、always.js を介してアプリを起動しています。

ゼロ負荷の下で、私のアプリの 1 つが一貫してエラーをスローしError: watch EMFILE、再起動します。そのアプリケーションは、常にそのエラーをスローしているにもかかわらず、引き続き機能します...このエラーに関する詳細情報を見つけようとしましたが、それほど多くはありません (「開いているファイルが多すぎます」または「ulimit を増やしてください」)。

私の質問は、アイドル状態のWeb アプリケーションでなぜこれが発生するのか、そしてなぜ 3 つのうち 1 つだけなのかということです。それは何もしていません...それはalways.jsの問題ですか?(ただし、このマシンでは他に 2 つのノード アプリが常に実行されています...) このエラーの原因、深刻な場合、および解決方法に関する情報を探しています。

ありがとう!

参考までに、コンソールからの関連する抜粋を次に示します。

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 の経験はありませんが、Linux の inotify API を使用する fs.watch コマンドを使用する他のノード ユーティリティで同様のエラーが発生しました。

次に、inotify の設定を確認してみてください。

cat /proc/sys/fs/inotify/max_user_instances

ファイルが存在する場合は、より高い値に設定すると役立つ場合があります。

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