オープンソースなApacheはWebサーバーとしてデファクトスタンダードです。
しかし、それ以外のWebサーバーもいくつかあります。

先の実験における、性能のボトルネックはどこにあるのかを調べるために、
より軽量で高速といわれるthttpd を試してみました。
なお、thttpdのtは、tiny、turbo、throttlingを意味するそうです。

先の実験のApacheはworkerモデルを選んでいます。これはマルチプロセス、マルチスレッドを併用したハイブリッドな方式です。
一方、thttpdはselectにより多重化しているシングルプロセス、シングルスレッドな方式です。
これらをいずれも、これをシングルコアのCPU上で実行させています。

thttpdについて詳しく知りたい方は以下のURLをご参照ください。

  • http://ja.wikipedia.org/wiki/Thttpd
  • http://www.acme.com/software/thttpd/

 


 

Apacheの場合

前回の結果の二つのグラフを引用しておきます。

Image

図1: 前回より、Apacheの場合のコネクション速度(単位:コネクション数/秒) 

  • 横軸:対数、HTMLファイルのサイズ
  • 縦軸:コネクション数/秒、
  • 赤色:Web Client - Apache Server、クライアントとサーバーを直結
  • 緑色:Web Client - IP Router - Apache Server、LVS役マシンをIPルーターとして構成
  • 青色:Web Client - LVS-NAT - Apache Server

 

Image

図2: 前回より、Apacheの場合のデータレート(単位:KB/秒)

  • 横軸:対数、HTMLファイルのサイズ
  • 縦軸:データレートKB/秒、
  • 赤色:Web Client - Apache Server、クライアントとサーバーを直結
  • 緑色:Web Client - IP Router - Apache Server、LVS役マシンをIPルーターとして構成
  • 青色:Web Client - LVS-NAT - Apache Server

 

thttpdの場合

前回と同じ条件で、thttpdを 使ってみました。
つまり、カーネルとそのバージョンも同じ、ネットワークも同じ、クライアントも同じ、IPルーターも同じ、LVS-NATも同じ環境で、Webサーバーだけをthttpdに変えただけです。

Image

図3: thttpdの場合のコネクション速度(単位:コネクション数/秒)

  • 横軸:対数、HTMLファイルのサイズ
  • 縦軸:コネクション数/秒、
  • 赤色:Web Client - thttpd Server、クライアントとサーバーを直結
  • 緑色:Web Client - IP Router - thttpd Server、LVS役マシンをIPルーターとして構成
  • 青色:Web Client - LVS-NAT - thttpd Server

Image

図4:thttpdの場合のデータレート(単位:KB/秒)

  • 横軸:対数、HTMLファイルのサイズ
  • 縦軸:データレートKB/秒、
  • 赤色:Web Client - thttpd Server、クライアントとサーバーを直結
  • 緑色:Web Client - IP Router - thttpd Server、LVS役マシンをIPルーターとして構成
  • 青色:Web Client - LVS-NAT - thttpd Server

 

まとめ 

コネクション速度(単位:コネクション数/秒)について比較すると、LVS-NAT経由時に、Apacheでは9500コネクション/秒でした。一方、thttpdでは15500コネクション/秒でした。この差は、処理の複雑なApacheのオーバーヘッドであると思われます。
thttpdでもコネクション速度は有限でした。これらはTCPのコネクションのオーバーヘッド(3ウェイハンドシェイクによるコネクションの確立)、HTTPのオーバーヘッドだと思われます。

なお、1バイトのコンテンツをGETしても、以下のように、260バイトを超えるHTTPヘッダーが付加されています。
TCPヘッダーは改変長で20バイト以上、IPヘッダーも可変長で20バイト以上です。実際にはより多くのデータがイーサネット上を流れています。

$ telnet webserver 80
Trying 192.168.1.2...
Connected to localhost.
Escape character is '^]'.
GET /1.html HTTP/1.0

HTTP/1.1 200 OK # ここからが応答
Date: Wed, 16 Jul 2008 04:07:02 GMT
Server: Apache/2.2.3
Last-Modified: Thu, 10 Apr 2008 07:03:46 GMT
ETag: "143171-1-44a7f6b291880"
Accept-Ranges: bytes
Content-Length: 1
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Language: ja

Connection closed by foreign host.

データレート(単位:KB/秒)について比較すると、 Apache、thttpdどちらも、55MB/秒付近で頭打ちです。
HTTPサーバーがApacheでも、thttpでも大きな違いはありません。
WebサーバーとWebクライアントを直結しても、IPルーター経由にしても、LVS-NAT経由にしても大きな違いありません。
これらの結果から、ネットワーク、あるいはWebクライアントの性能がボトルネックになっている可能性が考えられます。