私はこのようなHello worldの例を使用しています-
var sys = require("sys"),
my_http = require("http");
my_http.createServer(function(request,response){
response.writeHeader(200, {"Content-Type": "text/plain"});
response.writeHeader(200,{"Connection":"Keep-Alive"});
response.write("Hello World");
response.end();
}).listen(8080);
sys.puts("Server Running on 8080");
クライアント側では、次のように ab を使用しています (5k の同時接続を使用した合計 100000 リクエスト)
ab -n 100000 -c 5000 http://192.168.0.99:8080/
netstat -antp | grep 8080 | grep ESTABLISHED |wc -l
すると、200 から 300 の範囲の値しか取得できませ ん。サーバー側では、同じコマンドで 10 から 20 の同時接続しか表示されません。
まず、なぜ 2 つの数値に違いがあるのでしょうか。どちらも同じではないでしょうか?
次に、何千もの ESTABLISHED 接続が表示されないのはなぜですか?
サーバー側の設定 - http://pastebin.com/Cc77YQp7
クライアント側の設定 - http://pastebin.com/4pV16TuD
ご覧のとおり、TIME_WAIT を 1 秒で期限切れになるように設定し、Google の後で他のパラメーター (ulimit を増やすなど) も最適化しましたが、これら 2 つの問題の根本的な原因を見つけることができません。
apr_socket_recv: Connection timed out (110)
実際、クライアント側で(abツールで)何度もエラーが発生します
クライアントは Ubuntu 12 LTS で実行され、Node.JS は Debian 安定版 (wheezy) で実行されています。