mod_fastcgiとmod_fcgidとlighttpd

| |
ざっと試してみた。 ab2 -k -c 10 -n 10000 http://localhost/fcgi/tiny-cgi2.fcgiとして比較。 結果としてはデフォルトオプションならmod_fcgidが50%ほど速いということで。 それ以上にlighttpdとかは速いんだけど。 Webサーバ側でFastCGIのプロセス管理やるより外部でspawn-fcgiなどを使って管理した方が速いようだ。 まずはmod_fastcgi Server Software:        Apache Server Hostname:        localhost Server Port:            80 Document Path:          /fcgi/tiny-cgi2.fcgi Document Length:        26 bytes Concurrency Level:      10 Time taken for tests:   6.763819 seconds Complete requests:      10000 Failed requests:        0 Write errors:           0 Keep-Alive requests:    0 Total transferred:      1420000 bytes HTML transferred:       260000 bytes Requests per second:    1478.45 [#/sec] (mean) Time per request:       6.764 [ms] (mean) Time per request:       0.676 [ms] (mean, across all concurrent requests) Transfer rate:          204.91 [Kbytes/sec] received   つづいてmod_fcgid Server Software:        Apache Server Hostname:        localhost Server Port:            80 Document Path:          /fcgi/tiny-cgi2.fcgi Document Length:        382 bytes Concurrency Level:      10 Time taken for tests:   4.452744 seconds Complete requests:      10000 Failed requests:        9998    (Connect: 0, Length: 9998, Exceptions: 0) Write errors:           0 Non-2xx responses:      2 Keep-Alive requests:    0 Total transferred:      1420852 bytes HTML transferred:       260712 bytes Requests per second:    2245.81 [#/sec] (mean) Time per request:       4.453 [ms] (mean) Time per request:       0.445 [ms] (mean, across all concurrent requests) Transfer rate:          311.49 [Kbytes/sec] received   ふむ。mod_fcgidの方が速い。けど,どちらもデフォルト設定だからな。 チューニング次第で色々変わるだろうし,チューニングのしやすさとかプロセス管理の機能とか性能以外の面での問題も多いだろう。 そしてlighttpd Server Software:        lighttpd/1.4.8 Server Hostname:        localhost Server Port:            8081 Document Path:          /fcgi/tiny-cgi2.fcgi Document Length:        26 bytes Concurrency Level:      10 Time taken for tests:   2.592342 seconds Complete requests:      10000 Failed requests:        0 Write errors:           0 Keep-Alive requests:    10000 Total transferred:      1750000 bytes HTML transferred:       260000 bytes Requests per second:    3857.52 [#/sec] (mean) Time per request:       2.592 [ms] (mean) Time per request:       0.259 [ms] (mean, across all concurrent requests) Transfer rate:          658.86 [Kbytes/sec] received   おまけ。 Server Software:        nginx/0.3.21 Server Hostname:        localhost Server Port:            8080 Document Path:          /fcgi/tiny-cgi2.fcgi Document Length:        26 bytes Concurrency Level:      10 Time taken for tests:   3.33579 seconds Complete requests:      10000 Failed requests:        0 Write errors:           0 Keep-Alive requests:    0 Total transferred:      1480000 bytes HTML transferred:       260000 bytes Requests per second:    3296.44 [#/sec] (mean) Time per request:       3.034 [ms] (mean) Time per request:       0.303 [ms] (mean, across all concurrent requests) Transfer rate:          476.34 [Kbytes/sec] received   ちなみにtiny-cgi2.fcgiはCで書いた超単純FastCGIアプリ。アプリ側の負荷をできるだけ減らしてFastCGIの性能だけを見ましょうということで。 #include "fcgi_stdio.h" #include <stdlib.h> int main(int argc, char* argv[]){   int count = 0;   while(FCGI_Accept() >= 0)     puts("Content-type: text/html\r\n"            "\r\n"            "<h1>FastCGI Hello!</h1>\r\n"); }   それにしても。 init-+-6*[agetty]      |-amavisd---2*[amavisd]      |-apache2-+-apache2      |         |-apache2---10*[tiny-cgi2.fcgi]      |         |-2*[apache2---apache2---26*[apache2]]      |         `-14*[cronolog] (略)   すごいことになるな。MPM-worker+fcgi+cronolog。mod_cronologを野良ビルドででも組み込んじゃおうか・・・ 追記: tiny-cgi2.fcgiをWWWサーバから起動するのでなくspawn-fcgi -f tiny-cgi2.fcgi -s test.sockとしてソケットを開かせてみたら・・・ Server Software:        lighttpd/1.4.8 Server Hostname:        localhost Server Port:            8081 Document Path:          /fcgi/tiny-cgi2.fcgi Document Length:        26 bytes Concurrency Level:      10 Time taken for tests:   1.802325 seconds Complete requests:      10000 Failed requests:        0 Write errors:           0 Keep-Alive requests:    10000 Total transferred:      1750000 bytes HTML transferred:       260000 bytes Requests per second:    5548.39 [#/sec] (mean) Time per request:       1.802 [ms] (mean) Time per request:       0.180 [ms] (mean, across all concurrent requests) Transfer rate:          947.66 [Kbytes/sec] received   うわ。速っ。 apache2+mod_fastcgiでFastCgiExternalServerしてみる。 Server Software:        Apache Server Hostname:        localhost Server Port:            80 Document Path:          /fcgi/tiny-cgi2.fcgi Document Length:        26 bytes Concurrency Level:      10 Time taken for tests:   4.784050 seconds Complete requests:      10000 Failed requests:        0 Write errors:           0 Keep-Alive requests:    0 Total transferred:      1420000 bytes HTML transferred:       260000 bytes Requests per second:    2090.28 [#/sec] (mean) Time per request:       4.784 [ms] (mean) Time per request:       0.478 [ms] (mean, across all concurrent requests) Transfer rate:          289.71 [Kbytes/sec] received   こっちもまあちょっと速くなった。

Trackback URL for this post:

http://www.typemiss.net/trackback/52
from on 土, 2006-02-04 09:51
Xampp