2

Apacheベンチを使用して、node.jsがディスクから静的ファイルを提供する速度を再生して確認しようとしています

ab -r -n 10000 -c 1000 http://server:8080/loadtestfile.txt

OSX Lion上のUbuntu 11.04 x64 VirtualBox VMでulimitの問題があります

(node) Hit max file limit. Increase "ulimit - n"

もう限界を超えることはできません。

$ ulimit -n 1000000
$ limit -n 1100000
-su: ulimit: open files: cannot modify limit: Operation not permitted

これは、各 HTTP 要求を処理するために node.js にディスクからファイルをリロードさせる正しい方法ですか? 制限を 1000000 を超えて増やすにはどうすればよいですか?

通常のcurlリクエストは機能します:

curl http://server:8080/loadtestfile.txt

コード

var sys = require('sys'),
http = require('http'),
fs = require('fs'),
index;

http.createServer(function(request, response) {

fs.readFile('./loadtestfile.txt', function (err, data) {

    response.writeHeader(200, {"Content-Type": "text/plain"});
    response.write(data);
    response.end();
 });

}).listen(8080);
4

1 に答える 1

1

理想的には、アプリケーションは指定された制限内で実行されます。既存の接続が切断されるまで、別の接続を受け入れようとしないか、設定してaccept(2)エラー状態を返すことを適切に処理する必要があります。errno(3)EMFILEENFILE

ただし、このケースを適切に処理するようにアプリケーションを修正するのは難しい場合があります。さらにテストを行うために制限をさらに引き上げたい場合は、2つの可能性があります。

  • 編集/etc/security/limits.confして、ユーザーアカウントの制限をはるかに高い値に引き上げてからnofile、ユーザーアカウントに再度ログインします。

  • ルートシェルでテストを行います。root直接ログインするか、sudo -sまたはを使用suしてシェルを起動し、ulimit -nそこからコマンドを実行することができます。

制限を引き上げるには管理者アクセスが必要になるため、問題が発生します。(システムに同時に数百人のユーザーがいる場合は、それらのユーザーを快適にプレイし続けたいと思います...)

ただし、アプリケーションはシステム全体で開いているファイルの最大数の制限に達すると推測します。を介して構成されます/proc/sys/fs/file-max。アプリケーションが文句を言う場合は、その制限も引き上げます。

于 2012-05-05T00:20:23.347 に答える