バージョン4以降のApache Tomcatは、「Apache HTTP Serverと同等のHTTPエンジン(Catalina?, Coyote?)を内蔵しているので速い」と言われてますけど、ホントにそうなのか、ちょっとだけ調べてみました。
- 調査対象
- Apache HTTP Server 2.0.49 Windows版(.exe)
サーバ設定はほぼデフォルト
- Apache Tomcat 5.0.19 Windows版
サーバ設定はほぼデフォルト
- 調査ツール
- 調査PCスペック
- Server PC : Dell Optiplex GX240 (CPU:Pen4-B 1.8GHz、Memory:1GB)
- Client PC1: Dell PowerEdge 1600SC (CPU:Pen4-C 2.8GHz * 2、Memory:2GB)
- Client PC2: VAIO PCG-505T2/P (CPU:MobilePen4 2.2GHz、Memory:1GB)
- 調査方法
- TestCase
- HTMLコンテンツのデータ量が少ないケース(Apache2デフォルトのindex.html)
- 比較的コンテンツ量が多いケース(窓の杜トップページ、画像が66個)
- Stress Tool設定
- Stress Level (threads):1, 2, 4, 8, 16の5パターン
瞬間同時リクエスト数を想定したパラメータ
- Stress multiplier (sockets per thread):2, 4の2パターン
同一クライアントからの同時接続数を想定したパラメータ
IEでは、HTTP1.1の同時接続数デフォルトは2, HTTP1.0は4
- HTTP1.1リクエスト
- 1分間のテストを2回行い、結果値が近似であれば平均。近似でなければやり直し。
- 調査結果
- コンテンツが少ないケース(Client PC1による高負荷)
- Apache2 : 520 requests/s, CPU使用率 ほぼ常に100%
- Tomcat5 : 730 requests/s, CPU使用率 ほぼ常に100%
- thread数、socket数を変化させても、上記の結果に変動は無かった。
- コンテンツが少ないケース(Client PC2による低負荷)
- Apache2 : 416 requests/s, CPU使用率 70%程度
- Tomcat5 : 402 requests/s, CPU使用率 55%程度
- ServerのCPU使用率はほぼ常に100%
- thread数が2以上のときに、上記の結果で安定
- コンテンツが多いケース(Client PC1による高負荷)
- Apache2 : 504 requests/s, CPU使用率 ほぼ常に100%
- Tomcat5 : 705 requests/s, CPU使用率 ほぼ常に100%
- thread数が2以上のときに、上記の結果で安定
- コンテンツが多いケース(Client PC2による低負荷)
- Apache2 : 400 requests/s, CPU使用率 80%程度
- Tomcat5 : 388 requests/s, CPU使用率 50%程度
- ServerのCPU使用率はほぼ常に100%
- thread数が2以上のときに、上記の結果で安定
- 考察
- 高負荷時と低負荷時で、リクエスト処理数が逆転している。これは、Apache2の方がCPU使用率が高く、少ない処理数でスペックの上限に達してしまうからと考えられる。今回利用したWindows版のApache2は、デフォルトで多数のmoduleをLoadしているが、その影響があるか?
- リクエスト返却速度だけに注目するなら、Apache2とTomcat5の差は3%程度で、ほぼ同程度の性能と言ってよいと考える。
- Linux版で調査したい…
関連