用ab分析nodejs和php是不是不太好?

yifon 发布于 2015/04/12 15:12
阅读 714
收藏 0
PHP

请问从下面的分析结果可以看出什么?我想得到的测试结果是nodejs处理并发比php好


1、并发发送10个请求:

1)phpab -n 10 -c 10 http://localhost/testphp.php 

Concurrency Level:      10

Time taken for tests:   0.002 seconds

Complete requests:      10

Failed requests:        0

Total transferred:      2160 bytes

HTML transferred:       140 bytes

Requests per second:    4076.64 [#/sec] (mean)

Time per request:       2.453 [ms] (mean)

Time per request:       0.245 [ms] (mean, across all concurrent requests)

Transfer rate:          859.92 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    0   0.1      0       1

Processing:     0    1   0.4      1       2

Waiting:        0    1   0.4      1       1

Total:          1    2   0.4      2       2

 

Percentage of the requests served within a certain time (ms)

  50%      2

  66%      2

  75%      2

  80%      2

  90%      2

  95%      2

  98%      2

  99%      2

 100%      2 (longest request)

2)Node.js (ab -n 10 -c 10 http://127.0.0.1:4000/):

Concurrency Level:      10

Time taken for tests:   0.010 seconds

Complete requests:      10

Failed requests:        0

Total transferred:      1130 bytes

HTML transferred:       120 bytes

Requests per second:    961.45 [#/sec] (mean)

Time per request:       10.401 [ms] (mean)

Time per request:       1.040 [ms] (mean, across all concurrent requests)

Transfer rate:          106.10 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    0   0.1      0       1

Processing:     3    6   2.5      7      10

Waiting:        3    6   2.4      7      10

Total:          3    7   2.4      7      10

 

Percentage of the requests served within a certain time (ms)

  50%      7

  66%      8

  75%      8

  80%      9

  90%     10

  95%     10

  98%     10

  99%     10

 100%     10 (longest request)

2、并发发送100个请求:

1)phpab -n 100 -c 100 http://localhost/testphp.php 

Concurrency Level:      100

Time taken for tests:   0.010 seconds

Complete requests:      100

Failed requests:        0

Total transferred:      21600 bytes

HTML transferred:       1400 bytes

Requests per second:    10200.96 [#/sec] (mean)

Time per request:       9.803 [ms] (mean)

Time per request:       0.098 [ms] (mean, across all concurrent requests)

Transfer rate:          2151.76 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        2    2   0.1      2       2

Processing:     2    4   1.4      4       6

Waiting:        1    4   1.4      3       6

Total:          4    6   1.2      6       8

 

Percentage of the requests served within a certain time (ms)

  50%      6

  66%      6

  75%      7

  80%      7

  90%      8

  95%      8

  98%      8

  99%      8

 100%      8 (longest request)

2)Node.jsab -n 100 -c 100 http://localhost:4000/

Concurrency Level:      100

Time taken for tests:   0.050 seconds

Complete requests:      100

Failed requests:        0

Total transferred:      11300 bytes

HTML transferred:       1200 bytes

Requests per second:    1983.26 [#/sec] (mean)

Time per request:       50.422 [ms] (mean)

Time per request:       0.504 [ms] (mean, across all concurrent requests)

Transfer rate:          218.86 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        1    2   0.8      2       4

Processing:    15   27   7.0     27      46

Waiting:       15   27   6.9     27      44

Total:         19   29   6.2     29      47

 

Percentage of the requests served within a certain time (ms)

  50%     29

  66%     31

  75%     32

  80%     33

  90%     37

  95%     43

  98%     45

  99%     47

 100%     47 (longest request)

3、并发发送1000个请求:

1)phpab -n 1000 -c 1000 http://localhost/testphp.php 

Concurrency Level:      1000

Time taken for tests:   0.445 seconds

Complete requests:      1000

Failed requests:        0

Total transferred:      216000 bytes

HTML transferred:       14000 bytes

Requests per second:    2247.87 [#/sec] (mean)

Time per request:       444.866 [ms] (mean)

Time per request:       0.445 [ms] (mean, across all concurrent requests)

Transfer rate:          474.16 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    6   7.2      0      22

Processing:     2   85 138.7     11     421

Waiting:        1   85 138.7     11     421

Total:          8   91 143.8     12     434

 

Percentage of the requests served within a certain time (ms)

  50%     12

  66%     17

  75%    225

  80%    225

  90%    422

  95%    431

  98%    433

  99%    434

 100%    434 (longest request)

2)Node.jsab -n 1000 -c 1000 http://localhost:4000/

Concurrency Level:      1000

Time taken for tests:   0.279 seconds

Complete requests:      1000

Failed requests:        0

Total transferred:      113000 bytes

HTML transferred:       12000 bytes

Requests per second:    3583.73 [#/sec] (mean)

Time per request:       279.039 [ms] (mean)

Time per request:       0.279 [ms] (mean, across all concurrent requests)

Transfer rate:          395.47 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    8  10.7      0      29

Processing:    11   46  29.6     27     205

Waiting:       11   46  29.6     26     205

Total:         21   54  31.8     45     205

 

Percentage of the requests served within a certain time (ms)

  50%     45

  66%     74

  75%     89

  80%     92

  90%     99

  95%    101

  98%    103

  99%    103

 100%    205 (longest request)

4、并发发送2000个请求:

1phpab -n 2000 -c 2000 http://localhost/testphp.php 

Concurrency Level:      2000

Time taken for tests:   9.855 seconds

Complete requests:      2000

Failed requests:        0

Total transferred:      432000 bytes

HTML transferred:       28000 bytes

Requests per second:    202.95 [#/sec] (mean)

Time per request:       9854.707 [ms] (mean)

Time per request:       4.927 [ms] (mean, across all concurrent requests)

Transfer rate:          42.81 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    5  10.2      0      28

Processing:     2  105 703.4     10    9825

Waiting:        1  105 703.4     10    9825

Total:          7  110 706.2     11    9850

 

Percentage of the requests served within a certain time (ms)

  50%     11

  66%     12

  75%     12

  80%     13

  90%    240

  95%    640

  98%    645

  99%    646

 100%   9850 (longest request)

2Node.jsab -n 2000 -c 2000 http://localhost:4000/

Concurrency Level:      2000

Time taken for tests:   0.489 seconds

Complete requests:      2000

Failed requests:        0

Total transferred:      226000 bytes

HTML transferred:       24000 bytes

Requests per second:    4086.04 [#/sec] (mean)

Time per request:       489.472 [ms] (mean)

Time per request:       0.245 [ms] (mean, across all concurrent requests)

Transfer rate:          450.90 [Kbytes/sec] received

 

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    9  11.9      0      36

Processing:     8   48  36.7     24     226

Waiting:        8   47  36.7     24     226

Total:         21   56  40.7     25     226

 

Percentage of the requests served within a certain time (ms)

  50%     25

  66%     73

  75%     96

  80%    105

  90%    122

  95%    127

  98%    129

  99%    131

 100%    226 (longest request)


加载中
0
eechen
eechen
ab作为一个压力测试工具,肯定是公平的。epoll事件驱动的模型在并发大的时候(比如你文中测试的1000和2000)相对同步阻塞模式下的PHP肯定是有优势的。我的测试中,100并发下,进行50000次Redis的set/get操作,Node.JS却只比单工作进程的prefork下的Apache/PHP好一点点,每秒响应的请求数分别是5369:5140。而在静态页面的测试中,Node.JS则被PHP CLI Server这个从5.4内嵌的HTTP服务器远远抛在了身后,PHP CLI Server的RPS达到11405(过万C10K),而Node.JS的RPS却只有6049。

大并发下PHP也是有解决方案的,比如PHP Swoole,这是一个epoll异步驱动并结合多线程的PHP网络编程扩展,开启5个工作进程,使用这个扩展建立的HTTP服务器,完成20万个请求,在100并发时 RPS能达到19216,在1000并发时RPS仍能保持在较高水平,达到16159。PHP Swoole支持使用PHP进行TCP/UDP/HTTP/WebSocket编程,程序运行在CLI模式下,修改代码需要重启PHP,这点跟传统的 Apache/PHP和PHP-FPM不同,跟Node.JS类似。

eechen
eechen
小并发下(比如100),epoll异步发挥不出优势,所以Node.JS性能要比PHP低(CLI Server在100并发下RPS过万)。大并发下才能发挥epoll异步的优势。PHP在这方面的支持是Swoole。
0
yak
yak
> 3583.73/2247.87

1.5942781388603435

你的目的达到了 该满意了

yak
yak
回复 @june-映君 : 因为小量请求下 apache 在prefork模式下可以立即返回结果 实际上,你这是pk nodejs和apache 你要测试php和nodejs php服务器要这样启动 php -S localhost
yifon
yifon
我添加了100个请求时的结果,10个请求和100个时,为什么都是php比较快?
0
yak
yak
yak
回复 @june-映君 : 100个请求, -c 100 这种不叫并发 n要远大于c 才能模拟并发的效果
yifon
yifon
处理100个并发请求是,php是10200.96,明显比nodejs的1983.26快是为什么?
0
月影又无痕
月影又无痕

swoole 和 nodejs从各方面相比,nodejs根本不是swoole的对手。

不能单纯考虑AB下的测试性能,还得考虑可实施性,开发成本 开发效率等等问题。

返回顶部
顶部