2

更新 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)
4

2 に答える 2