Sun Java System Web Server 7.0 パフォーマンスのチューニング、サイジング、およびスケーリング

第 6 章 スケーラビリティー調査

この章では、スケーラビリティー調査の結果について説明します。これらの調査を参照することにより、サーバーのパフォーマンスや、Web Server の長所を最大限に活用するためのシステムの設定方法についてのサンプルを確認できます。

この章の内容は、次のとおりです。

調査の目標

調査での各テストの目標は、Sun Java System Web Server 7 のスケーラビリティーを示すことにありました。これらのテストはまた、異なる種類のコンテンツに対する構成やチューニングの要件を特定するためにも役立ちました。

調査は、次のコンテンツを使用して実行されました。

調査の結論

チューニングした場合、動的および静的コンテンツに対するパフォーマンスで、Sun Java System Web Server 7.0 はほぼ直線的なスケーラビリティーを示しました。

ハードウェア

調査 (電子商取引の調査を除く) は、次のハードウェアを使用して実行されました。電子商取引の調査のためのハードウェア情報については、「電子商取引テストのためのハードウェア」を参照してください。

静的コンテンツのための Web Server のシステム構成:

Web Server のシステム構成:

ドライバのシステム構成:

ネットワーク構成:

Web Server とドライバマシンを複数のギガビット Ethernet リンクで接続しました。

ソフトウェア

これらのテストのための読み込みドライバは、Faban ドライバと呼ばれる、社内で開発された Java アプリケーションフレームワークでした。

構成とチューニング

次のチューニング設定は、この調査でのすべてのテストに共通しています。また、個別の調査にも、構成とチューニングの追加情報が含まれている可能性があります。

/etc/system のチューニング:

set rlim_fd_max=500000
set rlim_fd_cur=500000


set sq_max_size=0
set consistent_coloring=2
set autoup=60
set ip:ip_squeue_bind=0
set ip:ip_soft_rings_cnt=0
set ip:ip_squeue_fanout=1
set ip:ip_squeue_enter=3
set ip:ip_squeue_worker_wait=0

set segmap_percent=6
set bufhwm=32768
set maxphys=1048576
set maxpgio=128
set ufs:smallfile=6000000

*For ipge driver
set ipge:ipge_tx_ring_size=2048
set ipge:ipge_tx_syncq=1
set ipge:ipge_srv_fifo_depth=16000
set ipge:ipge_reclaim_pending=32
set ipge:ipge_bcopy_thresh=512
set ipge:ipge_dvma_thresh=1
set pcie:pcie_aer_ce_mask=0x1

*For e1000g driver
set pcie:pcie_aer_ce_mask = 0x1

TCP/IP のチューニング:

ndd -set /dev/tcp tcp_conn_req_max_q 102400
ndd -set /dev/tcp tcp_conn_req_max_q0 102400
ndd -set /dev/tcp tcp_max_buf 4194304
ndd -set /dev/tcp tcp_cwnd_max 2097152
ndd -set /dev/tcp tcp_recv_hiwat 400000
ndd -set /dev/tcp tcp_xmit_hiwat 400000

ネットワーク構成

テストでは複数のネットワークインタフェースを使用したため、すべてのネットワークインタフェースが同じコアに行かないようにすることが重要でした。次のスクリプトを使用して、ネットワーク割り込みをコアの 1 つのストランドでは有効に、残りの 3 つのストランドでは無効にしました。


allpsr=`/usr/sbin/psrinfo | grep -v off-line | awk '{ print $1 }'`
  set $allpsr
  numpsr=$#
  while [ $numpsr -gt 0 ];
  do
      shift
      numpsr=`expr $numpsr - 1`
      tmp=1
      while [ $tmp -ne 4 ];
      do
          /usr/sbin/psradm -i $1
          shift
          numpsr=`expr $numpsr - 1`
          tmp=`expr $tmp + 1`
      done
  done

次の例は、スクリプトを実行する前の psrinfo 出力を示しています。


# psrinfo | more
0       on-line   since 12/06/2006 14:28:34
1       on-line   since 12/06/2006 14:28:35
2       on-line   since 12/06/2006 14:28:35
3       on-line   since 12/06/2006 14:28:35
4       on-line   since 12/06/2006 14:28:35
5       on-line   since 12/06/2006 14:28:35
.................

次の例は、スクリプトを実行したあとの psrinfo 出力を示しています。


0       on-line   since 12/06/2006 14:28:34
1       no-intr   since 12/07/2006 09:17:04
2       no-intr   since 12/07/2006 09:17:04
3       no-intr   since 12/07/2006 09:17:04
4       on-line   since 12/06/2006 14:28:35
5       no-intr   since 12/07/2006 09:17:04
          .................

Web Server のチューニング

次の表は、Web Server のために使用したチューニング設定を示しています。

表 6–1 Web Server のチューニング設定

構成要素 

デフォルト 

チューニング値 

アクセスログ 

enabled=true

enabled=false

スレッドプール 

min-threads=16

max-threads=128

stack-size=131072

queue-size=1024

min-threads=128

max-threads=200

stack-size=262144

queue-size=15000

HTTP リスナー 

ポート 80 上のセキュリティー保護されていないリスナー

listen-queue-size=128

ポート 80 上のセキュリティー保護されていないリスナー

ポート 443 上のセキュリティー保護されたリスナー

listen-queue-size=15000

キープアライブ 

enabled=true

threads=1

max-connections=200 timeout= 30 sec

enabled=true

threads=2

max-connections=15000 timeout =180 sec

default-web.xml

JSP コンパイルが有効 

JSP コンパイルが無効 

次の表は、SSL テストのために使用した SSL セッションキャッシュのチューニング設定を示しています。

表 6–2 SSL セッションキャッシュのチューニング設定

構成要素 

デフォルト 

SSL セッションキャッシュ 

enabled=true

max-entries=10000

max-ssl2-session-age=100

max-ssl3-tls-session-age=86400

パフォーマンステストと結果

ここでは、次のテストのためのテスト固有の構成、チューニング、および結果を示します。

パフォーマンスの特性を示すために、次の測定基準を使用しました。

パフォーマンスとスケーラビリティーの図は、システムで有効になっているコアの数に対するスループット (ops/秒) を示しています。

静的コンテンツテスト

このテストは、それぞれ 1K 〜 1000K バイトのサイズの 36 のファイルを含む、10,000 のディレクトリのプールからランダムに選択されたファイルの静的なダウンロードを使用して実行されました。静的コンテンツテストの目標は、コアを飽和させ、それぞれのスループットと応答時間を調べることでした。

このテストでは、次の構成を使用しました。

表 6–3 ファイルキャッシュの構成

デフォルト 

チューニング値 

enabled=true

max-age=30 sec

max-entries=1024

sendfile=false

max-heap-file-size=524288

max-heap-space=10485760

max-mmap-file-size=0

max-mmap-space=0

enabled=true

max-age=3600

max-entries=1048576

sendfile=true

max-heap-file-size=1200000

max-heap-space=8000000000

max-mmap-file-size=1048576

max-mmap-space= l

max-open-files=1048576

次の表は、静的コンテンツのスケーラビリティーの結果を示しています。

表 6–4 静的コンテンツのスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

10365 

184 

19729 

199 

27649 

201 

次の図は、静的コンテンツのスケーラビリティーの結果を示すグラフ表示です。

静的コンテンツのスケーラビリティー - コアの数

動的コンテンツテスト: サーブレット

このテストは、サーブレットを使用して実行されました。このテストは、サーブレットの初期化引数、環境、要求ヘッダー、接続とクライアントの情報、URL 情報、およびリモートユーザー情報を出力します。サーバーには、JVM のチューニング設定を適用しました。目標は、サーバー上のコアを飽和させ、それぞれのスループットと応答時間を調べることでした。

次の表は、このテストで使用された JVM のチューニング設定を示しています。

表 6–5 JVM のチューニング設定

デフォルト 

チューニング値 

-Xmx128m

-Xms256m

-server -Xrs -Xmx2048m -Xms2048m -Xmn2024m -XX:+AggressiveHeap -XX:LargePageSizeInBytes=256m -XX:+UseParallelOldGC -XX:+UseParallelGC -XX:ParallelGCThreads=<number of cores> -XX:+DisableExplicitGC

次の表は、動的コンテンツサーブレットテストの結果を示しています。

表 6–6 動的コンテンツテスト: サーブレットのスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

5287 

19 

10492 

19 

15579 

19 

次の図は、サーブレットのスケーラビリティーの結果を示すグラフ表示です。

サーブレットのスケーラビリティー - コアの数

動的コンテンツテスト: C CGI

このテストは、printenv という名前の C 実行可能ファイルにアクセスすることにより実行されました。この実行可能ファイルは、環境変数情報を出力します。サーバーには、CGI のチューニング設定を適用しました。目標は、サーバー上のコアを飽和させ、それぞれのスループットと応答時間を調べることでした。

次の表は、このテストで使用された CGI のチューニング設定を示しています。

表 6–7 CGI のチューニング設定

デフォルト 

チューニング値 

idle-timeout=300

cgistub-idle-timeout=30

min-cgistubs=0

max-cgistubs=16

idle-timeout=300

cgistub-idle-timeout=1000

min-cgistubs=100

max-cgistubs=100

次の表は、C CGI に対する動的コンテンツテストの結果を示しています。

表 6–8 動的コンテンツテスト: C CGI のスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

892 

112 

1681 

119 

2320 

129 

次の図は、C CGI のスケーラビリティーの結果を示すグラフ表示です。

C CGI のスケーラビリティー - コアの数

動的コンテンツテスト: Perl CGI

このテストは、CGI 環境を出力する printenv.pl という名前の Perl スクリプトを使用して実行されました。サーバーには、CGI のチューニング設定を適用しました。目標は、サーバー上のコアを飽和させ、それぞれのスループットと応答時間を調べることでした。

次の表は、Perl CGI に対する動的コンテンツテストで使用された CGI のチューニング設定を示しています。

表 6–9 CGI のチューニング設定

デフォルト 

チューニング値 

idle-timeout=300

cgistub-idle-timeout=30

min-cgistubs=0

max-cgistubs=16

idle-timeout=300

cgistub-idle-timeout=1000

min-cgistubs=100

max-cgistubs=100

次の表は、Perl CGI に対する動的コンテンツテストの結果を示しています。

表 6–10 動的コンテンツテスト: Perl CGI のスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

322 

310 

611 

327 

873 

343 

次の図は、Perl CGI のスケーラビリティーの結果を示すグラフ表示です。

Perl CGI のスケーラビリティー - コアの数

動的コンテンツテスト: NSAPI

このテストで使用された NSAPI モジュールは printenv2.so です。このモジュールは、NSAPI 環境変数を、応答全体を 2K バイトにするためのテキストとともに出力します。目標は、サーバー上のコアを飽和させ、それぞれのスループットと応答時間を調べることでした。

このテストのための唯一のチューニングは、未使用のパスチェックを削除することによる obj.conf 内のパスチェックの最適化でした。

次の表は、NSAPI に対する動的コンテンツテストの結果を示しています。

表 6–11 動的コンテンツテスト: NSAPI のスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

26264 

14 

12520 

15 

18417 

16 

次の図は、NSAPI のスケーラビリティーの結果を示すグラフ表示です。

NSAPI のスケーラビリティー - コアの数

PHP のスケーラビリティーテスト

PHP は、Web ベースの動的コンテンツの作成に特化した、広く使用されているスクリプト言語です。その単純性、アクセシビリティー、使用可能なモジュールの多さ、容易に使用可能なアプリケーションの多さなどで、インターネット上での使用がもっとも急速に拡大しているスクリプト言語です。

Web Server のスケーラビリティーと PHP エンジンの汎用性が組み合わされて、動的コンテンツのための、パフォーマンスの高い柔軟な Web 配備プラットフォームが提供されます。これらのテストでは、PHP バージョン 5.1.6 を使用しました。

テストは、次の 2 つのモードで実行されました。

テストでは、phpinfo() クエリーを実行しました。目標は、サーバー上のコアを飽和させ、それぞれのスループットと応答時間を調べることでした。

FastCGI を使用した PHP のスケーラビリティー

次の表は、FastCGI プラグインテストのために使用した Web Server のチューニング設定を示しています。

表 6–12 FastCGI プラグインテストのためのチューニング設定

構成 

チューニング 

magnus.conf

Init fn="load-modules" shlib="path_to_web_server_plugin_dir /fastcgi/libfastcgi.so" funcs="responder_fastcgi" shlib_flags="(global|now)"

obj.conf

NameTrans fn="assign-name" from="/fcgi/*" name="fcgi.config"
<Object name="fcgi.config">
Service type="magnus-internal/ws-php" fn="responder-fastcgi"
app-path="path_to_php"
bind-path="localhost:9000"
app-env="PHP_FCGI_CHILDREN=128"
app-env="PHP_FCGI_MAX_REQUESTS=20000"
app-env="LD_LIBRARY_PATH=path_to_php_lib"
listen-queue=8192
req-retry=2
reuse-connection=1
connection-timeout=120
resp-timeout=60
restart-interval=0
</Object>

mime.types

type=magnus-internal/ws-php exts=php,php3,php4

次の表は、FastCGI テストを使用した PHP の結果を示しています。

表 6–13 FastCGI を使用した PHP のスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

876 

114 

1706 

117 

2475 

121 

次の図は、FastCGI を使用した PHP のスケーラビリティーを示すグラフ表示です。

FastCGI を使用した PHP のスケーラビリティー - コアの数

NSAPI を使用した PHP のスケーラビリティー

次の表は、NSAPI テストを使用した PHP のための Web Server のチューニング設定を示しています。

表 6–14 PHP のための NSAPI プラグイン設定

magnus.conf

Init fn="load-modules" shlib="libphp5.so" funcs="php5_init,php5_close,php5_execute"

Init fn="php5_init" errorString="PHP Totally Blew Up!"

obj.conf

NameTrans fn="pfx2dir" from="/php-nsapi" dir=" path_to_php_script_dir" name="php-nsapi" <Object name="php-nsapi"> ObjectType fn="force-type" type="magnus-internal/x-httpd-php" Service fn=php5_execute </Object>

mime.types

type=magnus-internal/ws-php exts=php,php3,php4

次の表は、NSAPI テストを使用した PHP の結果を示しています。

表 6–15 NSAPI を使用した PHP のスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

950 

105 

1846 

108 

2600 

115 

次の図は、NSAPI を使用した PHP のスケーラビリティーを示すグラフ表示です。

NSAPI を使用した PHP のスケーラビリティー - コアの数

SSL パフォーマンステスト: 静的コンテンツ

このテストは、それぞれ 1K 〜 1000K バイトのサイズの 36 のファイルを含む、10,000 のディレクトリのプールからランダムに選択されたファイルの静的なダウンロードを使用して実行されました。SSL 静的コンテンツテストの目標は、コアを飽和させ、それぞれのスループットと応答時間を調べることでした。このテストには T2000 の 4 コアのみを使用しました。

このテストでは、次の構成を使用しました。

次の表は、SSL 静的コンテンツテストの結果を示しています。

表 6–16 SSL パフォーマンステスト: 静的コンテンツのスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

2284 

379 

4538 

387 

6799 

387 

次の図は、SSL を使用した静的コンテンツのスケーラビリティーを示すグラフ表示です。

SSL を使用した静的コンテンツのスケーラビリティー - コアの数

SSL パフォーマンステスト: Perl CGI

このテストは、SSL モードで CGI 環境を出力する printenv.pl という名前の Perl スクリプトを使用して実行されました。SSL セッションキャッシュを有効にした状態で、SSL モードでテストを実行しました。目標は、サーバー上のコアを飽和させ、それぞれのスループットと応答時間を調べることでした。

次の表は、SSL Perl CGI テストの結果を示しています。

表 6–17 SSL パフォーマンステスト: Perl CGI のスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

303 

329 

580 

344 

830 

361 

次の図は、SSL を使用した Perl のスケーラビリティーを示すグラフ表示です。

SSL を使用した PHP CGI のスケーラビリティー - コアの数

SSL パフォーマンステスト: C CGI

このテストは、SSL モードで printenv という名前の C 実行可能ファイルにアクセスすることにより実行されました。この実行可能ファイルは、環境変数情報を出力します。SSL セッションキャッシュを有効にした状態で、SSL モードでテストを実行しました。目標は、サーバー上のコアを飽和させ、それぞれのスループットと応答時間を調べることでした。

次の表は、SSL CGI テストの結果を示しています。

表 6–18 SSL パフォーマンステスト: C CGI のスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

792 

126 

1499 

133 

2127 

141 

次の図は、SSL を使用した C CGI のスケーラビリティーを示すグラフ表示です。

SSL を使用した C CGI のスケーラビリティー - コアの数

SSL パフォーマンステスト: NSAPI

このテストで使用された NSAPI モジュールは printenv2.so です。このモジュールは、NSAPI 環境変数を、応答全体を 2K バイトにするためのテキストとともに出力します。SSL セッションキャッシュを有効にした状態で、SSL モードでテストを実行しました。目標は、サーバー上のコアを飽和させ、それぞれのスループットと応答時間を調べることでした。

次の表は、SSL NSAPI テストの結果を示しています。

表 6–19 SSL パフォーマンステスト: NSAPI のスケーラビリティー

コアの数 

平均スループット (ops/秒) 

平均応答時間 (ミリ秒) 

2729 

29 

5508 

30 

7982 

32 

次の図は、SSL を使用した NSAPI のスケーラビリティーを示すグラフ表示です。

SSL を使用した NSAPI のスケーラビリティー - コアの数

電子商取引 Web アプリケーションテスト

電子商取引アプリケーションは、データベースを利用してオンラインショッピングのシミュレーションを行う、より複雑なアプリケーションです。

電子商取引テストのためのハードウェア

電子商取引の調査は、次のハードウェアを使用して実行されました。

Web Server のシステム構成:

データベースのシステム構成:

ドライバのシステム構成:

ネットワーク構成:

Web Server、データベース、およびドライバマシンをギガビット Ethernet リンクで接続しました。

電子商取引テストのための構成とチューニング

電子商取引テストは、次のチューニング設定を使用して実行されました。

JDBC のチューニング:

<jdbc-resource>
    <jndi-name>jdbc/jwebapp</jndi-name>
    <datasource-class>oracle.jdbc.pool.OracleDataSource</datasource-class>
    <max-connections>200</max-connections>
    <idle-timeout>0</idle-timeout>
    <wait-timeout>5</wait-timeout>
    <connection-validation>auto-commit</connection-validation>
    <property>
      <name>username</name>
      <value>  db_user  </value>
    </property>
    <property>
      <name>password</name>
      <value> db_password    </value>
    </property>
    <property>
      <name>url</name>
      <value>jdbc:oracle:thin:@db_host_name:1521:oracle_sid</value>
    </property>
 <property>
      <name>ImplicitCachingEnabled</name>
      <value>true</value>
    </property>
    <property>
      <name>MaxStatements</name>
      <value>200</value>
    </property>
  </jdbc-resource

JVM のチューニング:

-server -Xmx1500m -Xms1500m -Xss128k -XX:+DisableExplicitGC

電子商取引アプリケーションの説明

このテストでは、大量のインベントリからアイテムを販売する電子商取引 Web サイトをモデル化しました。その実装には、標準的な Web アプリケーションのモデル/表示/制御のデザインパターンを使用しています。ユーザーインタフェース (つまり、表示) は、1 つのマスター制御サーブレットとインタフェースする 16 種類の JSP ページで処理されます。このサーブレットは、モデルとして機能して 27 種類のクエリーを処理するデータベースへの JDBC 接続を維持しています。これらの JSP ページは JSP タグライブラリを広範囲に使用しており、ほぼ 2000 行のロジックで構成されます。

データベースのカーディナリティー

データベースには、1000 個の注文可能なアイテム (やはり 1000 のカーディナリティーを持つ 2 つの関連するテーブルがある)、72000 の顧客 (2 つの関連するテーブルがある)、および 190 万の注文 (2 つの関連するテーブルがある) が含まれています。標準の JDBC 接続が、準備済み文と次の標準の JDBC 設計原則を使用してデータベース接続を処理します。

作業負荷

ランダムに選択されたユーザーがオンラインショッピングを実行します。複合作業負荷で次の操作が使用されました。各操作は、操作の優先順位に従って実行されました。Home、AdminConfirm、AdminRequest、BestSellers、BuyConfirm、BuyRequest、CustomerRegistration、NewProducts、OrderDisplay、OrderInquiry、ProductDetail、SearchRequest、SearchResults、および ShoppingCart。

読み込みの起動には Faban ドライバを使用しました。思考時間を負の指数分布から選択しました。最小の思考時間は 7.5 秒、最大の思考時間は 75 秒でした。システムがサポートできる並行ユーザーの最大数を、次の合格条件に基づいて決定しました。

表 6–20 パフォーマンステストの合格条件

トランザクション 

90 パーセンタイルの応答時間 (秒) 

HomeStart 

AdminConfirm 

20 

AdminRequest 

BestSellers 

BuyConfirm 

BuyRequest 

CustomerRegistration 

Home 

NewProducts 

OrderDisplay 

OrderInquiry 

ProductDetail 

SearchRequest 

SearchResults 

10 

ShoppingCart 

次の表は、電子商取引 Web アプリケーションテストの結果を示しています。

表 6–21 電子商取引 Web アプリケーションのスケーラビリティー

CPU の数 

ユーザー 

スループット (ops/秒) 

7000 

790 

11200 

1350 

次の図は、電子商取引 Web アプリケーションのスケーラビリティーを示すグラフ表示です。

電子商取引 Web アプリケーションのスケーラビリティー - CPU の数 (ユーザー)

次の図は、電子商取引 Web アプリケーションのスケーラビリティーを示すグラフ表示です。

電子商取引 Web アプリケーションのスケーラビリティー - CPU の数 (スループット)