2017-04-14 4 views
1

負荷テストを実行すると、アプリケーションは比較的低い負荷ポイントで終了します。テストのために、私はこのnpmパッケージloadtestを使用します。Node + Express:アプリケーションをエラーで終了させるloadtest:accept ENFILE

10回の同時実行で10秒間に1000回のリクエストでテストを実行します。

loadtest http://localhost:3000/my/api -t 10 -c 10 --rps 1000 

アプリケーションには、約2秒後に終了し、非常に有用ではありません、次のエラーが発生します。

events.js:163 
     throw er; // Unhandled 'error' event 
    ^

Error: accept ENFILE 
    at exports._errnoException (util.js:1050:11) 
    at TCP.onconnection (net.js:1462:24) 

明らかに、これは開いているファイルの数に関係しています。私はこのコマンドを試しましたulimit -n <number>しかし、それは助けにはなりません。それは9999に制限されています(私はそれを上回ることはできません)。

アプリケーションでは、約10回の同時通貨で400rpsを処理できます。

私のローカルマシンはMac OS Sierra、CPU:1.6GHz、RAM:8GBです。

+0

は、関連の提供しますあなたが実行しているマシンがどれほど良い(または悪い)ものであっても、コード内の問題により、最小限の負荷でもアプリケーションがクラッシュする可能性があるため、コードはスタートになります。 – peteb

+0

あなたはどのようにして限界を9999と結論づけましたか? – robertklep

+0

@peteb問題はコードにありません。それは10回の同時通貨で約400 rpsでテストに応答します。誰かがENFILEエラーで明らかにできるかどうかだけを知りたい。 –

答えて

3

MacOSはかなり低く設定されています。カーネルオープンファイル記述子の許容数(合計およびプロセスあたり)の制限。私は妻のMacをチェックしなければなりませんでした。デフォルトのプロセスごとの制限は10240です。ulimitを使って制限されているものに基本的にスポットが当てられています(ulimitはカーネルの制限を超えません)。

それはsysctlのコマンドを実行し、しかし、これらの値を大きくするのは簡単です:

sudo sysctl kern.maxfiles=122880 kern.maxfilesperproc=102400 

を(それらは私が私のMac上で使用している値であり、彼らはかなり任意であるが、私のためにいい仕事)

あなたは彼らが(それを作成し、それがまだ存在しない場合)、再起動後に固執ファイル/etc/sysctl.confに次の2行を追加したい場合は、次の

kern.maxfiles=122880 
kern.maxfilesperproc=102400 
+0

私はこれもどこかを見ましたが、私は私が何を修正するか分からなかった。これは大いに役立ちます。 D @robertklep –

+0

loadtestの実行後にノードメモリが累積されているという問題がありますか?それはあなたのアプリケーションについて何を伝えていますか?また、あなたのアプリケーションであなたのマシンが処理できる要求/並行処理の最大数はいくらですか? @robertklep –

+0

V8が定期的にガベージコレクタを実行してそれをクリーンアップするため、@SorakthunLyメモリが蓄積されても必ずしも悪いことである必要はありません。並行性に関して、それは本当にアプリケーションが正確に何をするかに依存します。 – robertklep

関連する問題