2

更新 1:@BagosGiAr 使用非常相似的配置进行的测试表明集群总是应该表现得更好。也就是说,我的配置有问题,我请你帮我找出可能的问题。

更新 2:我想深入研究这个问题。我已经在 LiveCD* (Xubuntu 13.04) 上进行了测试,相同的节点版本。首先,Linux 的性能比 Windows 好得多:-n 100000 -c 1000没有集群时为我 6409.85 reqs/sec,集群时为 7215.74 reqs/sec。Windows build 肯定有很多问题。我仍然想调查为什么这种情况只发生在我身上,因为一些具有类似配置的人表现更好(并且集群也表现良好)。

*应该注意的是,LiveCD 使用 RAM 文件系统,而在 Windows 中我使用的是快速 SSD。

这怎么可能?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 reqs/second

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

0

您没有在您的 url 地址中提供端口号 8080。

默认情况下,当没有给出端口时使用 80。(8080 是用于 Apache Tomcat 的默认端口)。也许另一台服务器正在侦听您机器上的端口 80。

更新

机器规格:Intel(R) Xeon(R) CPU X5650 @ 2.67GHz,64GB RAM,CentOS Linux release 6.0(Final),node -v 0.8.8,ab -V 2.3

我认为您的情况的问题是,当您运行基准测试时,Windows 没有有效地使用资源,或者 CPU 或 RAM 已经饱和。

没有集群(使用相同的脚本)

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.232.5.169 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:
Server Hostname:        10.232.5.169
Server Port:            8000

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      1000
Time taken for tests:   3.196 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      860000 bytes
HTML transferred:       110000 bytes
Requests per second:    3129.14 [#/sec] (mean)
Time per request:       319.577 [ms] (mean)
Time per request:       0.320 [ms] (mean, across all concurrent requests)
Transfer rate:          262.80 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    3  43.0      0    2999
Processing:     1   81  39.9     81     201
Waiting:        1   81  39.9     81     201
Total:         12   84  57.8     82    3000

Percentage of the requests served within a certain time (ms)
  50%     82
  66%    103
  75%    114
  80%    120
  90%    140
  95%    143
  98%    170
  99%    183
 100%   3000 (longest request)

使用集群(使用您的集群脚本)

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.232.5.169 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:
Server Hostname:        10.232.5.169
Server Port:            8000

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      1000
Time taken for tests:   1.056 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      924672 bytes
HTML transferred:       118272 bytes
Requests per second:    9467.95 [#/sec] (mean)
Time per request:       105.620 [ms] (mean)
Time per request:       0.106 [ms] (mean, across all concurrent requests)
Transfer rate:          854.96 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       22   47  13.6     46      78
Processing:    23   52  13.8     52     102
Waiting:        5   22  17.6     17      83
Total:         77   99   5.8    100     142

Percentage of the requests served within a certain time (ms)
  50%    100
  66%    101
  75%    102
  80%    102
  90%    104
  95%    105
  98%    110
  99%    117
 100%    142 (longest request)
于 2013-05-10T09:52:35.617 回答
0

I assume this is a result for not using the concurrent option of ApacheBench. as a default ab makes one request at the time, so the each request (in the cluster test) is served by one node and the rest of them stay idle. If you use the -c option you will benchmark the cluster mode of nodejs. eg
ab -n 10000 -c 4 -t 25 http://127.0.0.1:8083/
My result are:
Without cluster ab -n 10000 -t 25 http://127.0.0.1:8083/:

Server Software:
Server Hostname:        127.0.0.1
Server Port:            8083

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      1
Time taken for tests:   16.503 seconds
Complete requests:      50000
Failed requests:        0
Write errors:           0
Total transferred:      4300000 bytes
HTML transferred:       550000 bytes
Requests per second:    3029.66 [#/sec] (mean)
Time per request:       0.330 [ms] (mean)
Time per request:       0.330 [ms] (mean, across all concurrent requests)
Transfer rate:          254.44 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    0   0.4      0      13
Waiting:        0    0   0.4      0      11
Total:          0    0   0.5      0      13

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      1
  80%      1
  90%      1
  95%      1
  98%      1
  99%      1
 100%     13 (longest request)

With cluster ab -n 10000 -c 4 -t 25 http://127.0.0.1:8083/:

Server Software:
Server Hostname:        127.0.0.1
Server Port:            8083

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      4
Time taken for tests:   8.935 seconds
Complete requests:      50000
Failed requests:        0
Write errors:           0
Total transferred:      4300000 bytes
HTML transferred:       550000 bytes
Requests per second:    5595.99 [#/sec] (mean)
Time per request:       0.715 [ms] (mean)
Time per request:       0.179 [ms] (mean, across all concurrent requests)
Transfer rate:          469.98 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.6      1      17
Waiting:        0    0   0.6      0      17
Total:          0    1   0.6      1      18

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      1
  98%      1
  99%      1
 100%     18 (longest request)

Cheers!

EDIT I forgot my specifications; Windows 8x64, intel core i5-2430M @ 2.4GHz, 6GB RAM

于 2013-05-10T10:51:42.423 回答