68

ごく最近、Node.js を実行しているサイトに大量のトラフィックを受け取りました。トラフィックの増加に伴い、これまでにないほど多くのクラッシュが発生し始めました。ログに次のエラーが表示されます。

{ [Error: connect EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'connect' }
Error: connect EMFILE
    at errnoException (net.js:670:11)
    at connect (net.js:548:19)
    at net.js:607:9
    at Array.0 (dns.js:88:18)
    at EventEmitter._tickCallback (node.js:192:40)

なぜクラッシュするのか考えている人はいますか?そして、それを解決する方法のアイデアは?

Express.js と Socket.io を使用しています。Ubuntuで動作します。

4

3 に答える 3

67

EMFILEエラーは、OS がプログラムがそれ以上のファイル/ソケットを開くことを拒否していることを意味します。

以下をご覧ください: Linux で開いているファイル数の制限を変更するにはどうすればよいですか?

于 2012-05-02T21:04:05.293 に答える
5

私の場合、すでに ulimit セットと kern.maxfiles 構成が Mac で可能な最高のものでした。

それを修正したのは、最大ソケット数をグローバルに制限することでした。ノードのそれ以降のバージョンでは、制限は無限です。

次のコード行を追加してみてください。

var https = require('https');
var http = require('http');

https.globalAgent.maxSockets = 5;
http.globalAgent.maxSockets = 5;

リクエスト ライブラリを使用する場合、これらの設定を構成できます。

参照: https://github.com/request/request#request---simplified-http-client

maxSockets の詳細はこちら: https://nodejs.org/api/http.html#http_agent_maxsockets

于 2016-01-04T21:59:11.680 に答える