tcpcgi:benchmark

[トップ][一覧][最近の更新]

とりあえず測定してみた(tcpcgi-0.3/tcpcgi-server無し)。

尚、測定サーバにはapacheをインストールしていない為、通常のcgiやfastcgiとの速度差は測っていません。


gs-alphaサーバでは、40000番にて、tcpserver+tcpcgiを動作させている(註:ベンチマークテスト時のみです。本番運用時は127.0.0.1:40000にbindさせるので、外部からはアクセスできません)。

そこへ、外部サーバからabをかけてみる。

/usr/local/apache/bin/ab \
-n 1000 -c 1 \
http://gs-alpha.tir.jp:40000/wiliki
This is ApacheBench, Version 1.3d <$Revision: 1.70 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking gs-alpha.tir.jp (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software:        tcpcgi/0.3
Server Hostname:        gs-alpha.tir.jp
Server Port:            40000

Document Path:          /wiliki
Document Length:        1087 bytes

Concurrency Level:      1
Time taken for tests:   479.456 seconds
Complete requests:      1000
Failed requests:        0
Broken pipe errors:     0
Total transferred:      1268000 bytes
HTML transferred:       1087000 bytes
Requests per second:    2.09 [#/sec] (mean)
Time per request:       479.46 [ms] (mean)
Time per request:       479.46 [ms] (mean, across all concurrent requests)
Transfer rate:          2.64 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        9    10    0.4     10    17
Processing:   289   470  145.6    509   721
Waiting:      277   469  145.6    509   720
Total:        289   479  146.0    519   731

Percentage of the requests served within a certain time (ms)
  50%    519
  66%    591
  75%    622
  80%    633
  90%    653
  95%    663
  98%    675
  99%    681
 100%    731 (last request)

え、「毎秒2リクエストの応答速度?そんなの駄目駄目じゃん」って?

そこで、abに-kオプションを投入してみる。

/usr/local/apache/bin/ab \
-k -n 1000 -c 1 \
http://gs-alpha.tir.jp:40000/wiliki
(省略)
Concurrency Level:      1
Time taken for tests:   62.675 seconds
Complete requests:      1000
Failed requests:        0
Broken pipe errors:     0
Keep-Alive requests:    1000
Total transferred:      1295000 bytes
HTML transferred:       1087000 bytes
Requests per second:    15.96 [#/sec] (mean)
Time per request:       62.67 [ms] (mean)
Time per request:       62.67 [ms] (mean, across all concurrent requests)
Transfer rate:          20.66 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0     0    0.3      0     9
Processing:    57    62   11.3     60   288
Waiting:       56    62   11.3     59   287
Total:         57    62   11.4     60   297
(省略)

毎秒16リクエストの速度になった。

しかし、まだまだ。

そこで、abの並列度を上げて、-c 10にしてみる。

/usr/local/apache/bin/ab \
-k -n 1000 -c 10 \
http://gs-alpha.tir.jp:40000/wiliki
(省略)
Concurrency Level:      10
Time taken for tests:   10.239 seconds
Complete requests:      1000
Failed requests:        0
Broken pipe errors:     0
Keep-Alive requests:    1000
Total transferred:      1295051 bytes
HTML transferred:       1087000 bytes
Requests per second:    97.67 [#/sec] (mean)
Time per request:       102.39 [ms] (mean)
Time per request:       10.24 [ms] (mean, across all concurrent requests)
Transfer rate:          126.48 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0     0    1.1      0    13
Processing:    58   102  204.5     75  2633
Waiting:       58   101  204.5     75  2633
Total:         58   102  205.7     75  2646
(省略)

大体、毎秒100リクエストの速度になった。コレならfcgiやmod_言語名に余裕で勝てる(……と言いたいものの、ちゃんと速度比較していないので、実際の真偽は不明)。

だが、アクセスしてくるクライアントはバラバラなので、通常は、abの-kの速度はまず出ない。

そこで、reverse proxyとして、squidを設置する。

squidはgs-alphaサーバの80番で待ち受け、localhost:40000のtcpserver+tcpcgiからデータを取得し、クライアントへ返す。当然、Keep-Aliveは最大限に活用してくれる。

/usr/local/apache/bin/ab \
-n 1000 -c 1 \
http://gs-alpha.tir.jp/wiliki
This is ApacheBench, Version 1.3d <$Revision: 1.70 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking gs-alpha.tir.jp (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software:        tcpcgi/0.3
Server Hostname:        gs-alpha.tir.jp
Server Port:            80

Document Path:          /wiliki
Document Length:        1087 bytes

Concurrency Level:      1
Time taken for tests:   72.017 seconds
Complete requests:      1000
Failed requests:        0
Broken pipe errors:     0
Total transferred:      1364000 bytes
HTML transferred:       1087000 bytes
Requests per second:    13.89 [#/sec] (mean)
Time per request:       72.02 [ms] (mean)
Time per request:       72.02 [ms] (mean, across all concurrent requests)
Transfer rate:          18.94 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        9    10    1.1     10    41
Processing:    59    61   10.1     59   281
Waiting:       57    61   10.1     58   280
Total:         67    71   10.2     69   290

Percentage of the requests served within a certain time (ms)
  50%     69
  66%     69
  75%     70
  80%     70
  90%     71
  95%     95
  98%     96
  99%     97
 100%    290 (last request)

間にsquidが入った分と、abとsquidの間は毎回コネクションを切断する分で、若干処理速度が落ち、毎秒14回にはなったが、それでも充分高速だ。

また、実際にはアクセスは並列に起こるので、-k無しで-c 10でも試してみる。

/usr/local/apache/bin/ab \
-n 1000 -c 10 \
http://gs-alpha.tir.jp/wiliki
(省略)
Concurrency Level:      10
Time taken for tests:   11.388 seconds
Complete requests:      1000
Failed requests:        0
Broken pipe errors:     0
Total transferred:      1364000 bytes
HTML transferred:       1087000 bytes
Requests per second:    87.81 [#/sec] (mean)
Time per request:       113.88 [ms] (mean)
Time per request:       11.39 [ms] (mean, across all concurrent requests)
Transfer rate:          119.78 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:       10    16    5.3     15    64
Processing:    35    97  186.1     74  2589
Waiting:       21    97  186.1     73  2589
Total:         35   113  186.8     90  2614
(省略)

それでも、毎秒88回。

どうです?この際、perlなんか捨てて、コレからはschemeで巨大ウェブサービスを構築してみませんか?

とりあえず、自分はschemeで巨大ウェブサービスを構築します。遊びで。

(会社では、残念な事に、perl仕事……)


最終更新 : 2005/01/18 09:26:57 JST