更新 1 : 非常によく似た構成での @BagosGiAr テストは、クラスターのパフォーマンスが常に向上することを示しています。つまり、私の構成に問題があり、その原因を突き止める手助けをしてほしいとお願いしています。
更新 2 : この問題について詳しく説明したいと思います。同じノード バージョンの LiveCD* (Xubuntu 13.04) でテストしました。まず、Linux のパフォーマンスは Windows よりもはるかに優れて-n 100000 -c 1000
います。クラスターなしで 6409.85 リクエスト/秒、クラスタリングありで 7215.74 リクエスト/秒です。Windowsビルドには間違いなく多くの問題があります。それでも、同様の構成を持つ一部の人々がより優れたパフォーマンスを発揮する (そしてクラスタリングもうまく機能する) ことを考えると、なぜこれが私だけに起こっているのかを調査したいと思います。
*Windows では高速な SSD を使用していましたが、LiveCD は RAM ファイルシステムを使用していることに注意してください。
これはどのように可能ですか?cluster
モジュールを使用すると結果が良くなるはずではありませんか? 仕様: Windows 7 x64、デュアルコア P8700 2.53Ghz、4GB RAM、Node.js 0.10.5、ab 2.3。テスト コマンド ラインはab -n 10000 -c 1000 http://127.0.0.1:8080/
.
var http = require('http');
http.createServer(function (req, res) {
res.end('Hello World');
}).listen(8080);
ベンチマーク結果 ~ 2840.75 リクエスト/秒:
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Server Software:
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /
Document Length: 12 bytes
Concurrency Level: 1000
Time taken for tests: 3.520 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 870000 bytes
HTML transferred: 120000 bytes
Requests per second: 2840.75 [#/sec] (mean)
Time per request: 352.020 [ms] (mean)
Time per request: 0.352 [ms] (mean, across all concurrent requests)
Transfer rate: 241.35 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 7.1 0 505
Processing: 61 296 215.9 245 1262
Waiting: 31 217 216.7 174 1224
Total: 61 297 216.1 245 1262
Percentage of the requests served within a certain time (ms)
50% 245
66% 253
75% 257
80% 265
90% 281
95% 772
98% 1245
99% 1252
100% 1262 (longest request)
クラスタ モジュールを使用する場合:
var cluster = require('cluster'),
http = require('http'),
numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function (worker, code, signal) {
console.log('worker ' + worder.process.pid + ' died');
});
} else {
http.createServer(function (req, res) {
res.end('Hello World');
}).listen(8080);
}
...そして同じベンチマークでは、結果は最悪です: 849.64 reqs/sec :
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Server Software:
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /
Document Length: 12 bytes
Concurrency Level: 1000
Time taken for tests: 11.770 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 870000 bytes
HTML transferred: 120000 bytes
Requests per second: 849.64 [#/sec] (mean)
Time per request: 1176.967 [ms] (mean)
Time per request: 1.177 [ms] (mean, across all concurrent requests)
Transfer rate: 72.19 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 21.3 0 509
Processing: 42 1085 362.4 1243 2274
Waiting: 27 685 409.8 673 1734
Total: 42 1086 362.7 1243 2275
Percentage of the requests served within a certain time (ms)
50% 1243
66% 1275
75% 1286
80% 1290
90% 1334
95% 1759
98% 1772
99% 1787
100% 2275 (longest request)