62

しばらくの間、次のエラーが発生しています。

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)

このファイル (mvc.node.js:79) を呼び出すコード行は次のとおりです。

    this.currentRoute.class = require( controllerFile )[dispatchClass].bind( this );

(私が作成しているフレームワークです)

ご覧のとおり、ファイル auth.node.js は REQUIRE によって呼び出されるため、gracefullFS などの特定のソリューションは適合しません。また、この問題は MacOS のみで発生します。Ubuntuでは問題なく動作するようです。

何かご意見は?

4

11 に答える 11

48

この問題は、maxfiles制限を増やすことで解決できます。

launchctl limit maxfiles 16384 16384 && ulimit -n 16384
于 2014-08-11T05:41:03.473 に答える
22

このエラーが発生し、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

そして、

ulimit -n 65536 65536

の中へ~/.bashrc

于 2015-01-16T10:45:18.110 に答える
7

ulimit を確認してください。たとえば、最初は OSX での ulimit は 256 でした。

  • 実行ulimit -nして限界を確認します。
  • その後ulimit -n 1024、より高い制限を設定できます。
于 2015-10-06T08:25:54.770 に答える
6

他の答えはどれも私にとってはうまくいきませんでした。これはトリックをしました:

launchctl limit maxfiles 16384 16384 

また、これはセッション間で保存されないため、bash ターミナル セッションごとに実行する場合を除き、上記の行を ~/.bashrc (または zsh を使用している場合は ~/.zshrc) に配置することをお勧めします。コマンドラインで:

vi ~/.bashrc
于 2014-10-22T16:59:58.610 に答える
2

端末を使用している場合は ulimit が優れていますが、同じ端末タブ (またはシェル インスタンス) からアプリを実行している場合にのみ機能します。Launchctl は優れていますが、システム全体です。Launchctl limit maxfile をそのままにしておくと、ソフト制限は 256 になり、ハード制限は無制限になります。

実稼働環境では、おそらく起動時に起動し、クラッシュ時に再起動する必要があります。つまり、Mac OSX の最善の答えは、アプリケーションごとに .plist ファイルを使用することです。上記のplistファイルを使用してノードアプリケーションを起動します(起動時に実行され、クラッシュ後に再起動します)...このファイル内で、キーを使用してアプリケーションごとSoftResourcesLimitのファイルの量を設定できます。

<key>KeepAlive</key>
<true/>

<key>RunAtLoad</key>
<true/>

<key>SoftResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
  <integer>16384</integer>
</dict>
于 2014-11-26T17:04:47.453 に答える
0

awonghの答えは私のために働いた

ulimit -n 10480

ただし、対話型シェルを開始した後でのみ

sudo -i

シェルの外では、OSX Yosemite で許可エラーが発生し続けました

于 2016-06-02T19:12:33.800 に答える