以下の3パターンの性能比較を行いました。
+Apache HTTP ServerとApache Tomcat ''1台''を異なるPC上に配置し、mod_jk2を使って連携させた場合
+Apache HTTP ServerとApache Tomcat ''2台''を異なるPC上に配置し、mod_jk2を使って連携させた場合
+Apache HTTP ServerとApache Tomcat ''3台''を異なるPC上に配置し、mod_jk2を使って連携させた場合

+ 調査対象
-- Apache HTTP Server 2.0.49 Windows版(.exe)~
 性能に関するサーバ設定はほぼデフォルト
-- Apache Tomcat 5.0.19 Windows版~
 性能に関するサーバ設定はほぼデフォルト
-- Tomcat mod_jk2 web server connector 2.0.4 Windows版
+ 調査ツール
-- [[Microsoft Web Application Stress Tool 1.1.293.1:http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/itsolutions/intranet/downloads/webstres.asp]]
+ 調査PCスペック
-- Server PC1 : Dell Optiplex GX240 (CPU:Pen4-B 1.8GHz、Memory:1GB)
-- Server PC2 : Dell Optiplex GX240 (CPU:Pen4-B 1.8GHz、Memory:1GB)
-- Server PC3 : Dell Optiplex GX240 (CPU:Pen4-B 1.8GHz、Memory:1GB)
-- Client PC1 : Dell PowerEdge 1600SC (CPU:Pen4-C 2.8GHz * 2、Memory:2GB)
-- Client PC1 : VAIO PCG-V505T2/P (CPU:MobilePen4 2.2GHz、Memory:1GB)
+ 調査方法
-- TestCase
+++ Apache AXISを利用したSOAP Webサービスに対して、異なる引数パラメータをもった3種類のリクエストを順番にローテーションさせます。~
※[[静的コンテンツ>Apache2とTomcat5のPerformance比較]]と比べて、全体的に遅いのは、このWebサービスがリクエスト毎に''3回ずつDB接続しているから''です。(「アクセスログを記録」「リクエスタ認証」「アプリデータ取得」)
※[[静的コンテンツ>Apache2とTomcat5のPerformance比較]]と比べて、全体的に遅いのは、このWebサービスが''リクエスト毎に3回ずつDB接続している''からです。(「アクセスログを記録」「リクエスタ認証」「アプリデータ取得」)
+++ DBCP(Database Connection Pool)は、Webアプリ-DB毎に8本(固定)
-- Stress Tool設定
+++ Stress Level (threads):4, 8, 16, 24 (4パターン+α)~
 瞬間同時リクエスト数を想定したパラメータ
+++ Stress multiplier (sockets per thread):2 (1パターン)~
 同一クライアントからの同時接続数を想定したパラメータ~
 IEでは、HTTP1.1の同時接続数デフォルトは2, HTTP1.0は4
+++ HTTP1.1リクエスト
+++ 1分間のテストを2回行い、結果値が近似であれば平均。近似でなければやり直し。
+++ 試験中にWebサービス簡易リクエスタから手動で数回リクエストし、正常に返ってくることを確認する。
+ 調査結果
++ Tomcat 1台の場合
--- thread数  4、27 requests/s、CPU 55~70%(Tomcat5)
--- thread数  8、36 requests/s、CPU 90%(Tomcat5)
--- thread数 12、37 requests/s、CPU 95%(Tomcat5)
--- thread数 16、37 requests/s、CPU 95%(Tomcat5)
--- thread数 24 -> Internal Server Error(500) が発生
++ Tomcat 2台(1:1)の場合
--- thread数  4、35 requests/s、CPU 40%(Tomcat5)
--- thread数  8、56 requests/s、CPU 70%(Tomcat5)
--- thread数 16、76 requests/s、CPU 100%(Tomcat5)
--- thread数 20、正常4681件 {78 requests/s、CPU 100%(Tomcat5)}~
    -> エラー17件 &color(red){DBコネクションが足りなくなりました};。MySQLとJDBC設定(コネクションプール数)の見直しが必要です。
++ Tomcat 3台(1:1;1)の場合
--- thread数  4 -> &color(red){DBコネクションが足りなくなりました};。MySQLとJDBC設定(コネクションプール数)の見直しが必要です。
--- thread数  4、25 requests/s、CPU 60%(Tomcat5)
--- thread数  8、38 requests/s、CPU 97%(Tomcat5)
--- thread数 12、40 requests/s、CPU 100%(Tomcat5)
--- thread数 16、エラー25件 正常2340件 {39 requests/s、CPU 100%(Tomcat5)}~
++ Tomcat 2台(RoundRobin 1:1)の場合
--- thread数  4、36 requests/s、CPU 33%(Tomcat5)
--- thread数  8、51 requests/s、CPU 55%(Tomcat5)
--- thread数 12、67 requests/s、CPU 90%(Tomcat5)
--- thread数 16、78 requests/s、CPU 100%(Tomcat5)
--- thread数 20、80 requests/s、CPU 100%(Tomcat5)
--- thread数 24、エラー8件 正常4649件 {77 requests/s、CPU 100%(Tomcat5)}~
++ Tomcat 3台(RoundRobin 1:1;1)の場合
--- thread数  4、37 requests/s、CPU 20%(Tomcat5)
--- thread数  8、69 requests/s、CPU 40%(Tomcat5)
--- thread数 12、84 requests/s、CPU 60%(Tomcat5)
--- thread数 16、100 requests/s、CPU 80%(Tomcat5)
--- thread数 20、103 requests/s、CPU 80%(Tomcat5)
--- thread数 24、97 requests/s、CPU 80%(Tomcat5)
--- thread数 28、104 requests/s、CPU 80%(Tomcat5)
#ref(result.png,nolink);
+ 考察
-- DB周辺の設定を見直して、再度テストが必要。
-- Tomcatを並列に増やすと、性能も向上することがわかった。
--- 仮に、100requests/sが丸1日続いたとすると、''864万requests/day''という計算になります。性能検証における現実的なアクセス予想の考え方は様々ですから、ここでは割愛します。
--- Tomcat 3台時の後半は、TomcatのCPU負荷以外のボトルネックが存在しているので、パフォーマンスに変化が見られないのだと思われる。
-- あとは、信頼性・可用性の検証が必要。
-- 実験中に、「指定した割合でバランシングしない」現象が2度発生した。

   想定システム図
#ref(WebLoadBalanceWithOSS.png,nolink);
----
 関連
-[[Apache2とTomcat5のPerformance比較]]
-[[Apache2+mod_jk2+Tomcat5連携とTomcat5 StandAloneとのPerformance比較]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS