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

第 4 章 プラットフォーム固有の問題と注意事項

この章では、プラットフォーム固有のチューニングの注意事項について説明します。この章の内容は、次のとおりです。

Solaris プラットフォーム固有の問題

ここでは、その他の Solaris 固有の問題やチューニングの注意事項について説明します。この章の内容は、次のとおりです。

1 つのプロセスで開いているファイルの数 (ファイル記述子の制限)

1 つのプロセスで一度に開くことのできるファイルの数に対する制限は、プラットフォームごとに異なります。ビジー状態のサイトでは、その数を増やすことが必要な場合があります。Solaris システムでは、/etc/system ファイル内の rlim_fd_max を設定することによってこの制限を制御します。Solaris 8 の場合、デフォルトは 1024 であり、65536 まで増やすことができます。Solaris 9 および 10 の場合、デフォルトは 65536 であり、この値を増やす必要はありません。

/etc/system ファイルでこの変更や、その他の任意の変更を行ったあと、新しい設定を有効にするには Solaris を再起動します。さらに、新しいバージョンの Solaris にアップグレードした場合は、/etc/system に追加した行をすべて削除し、その行がまだ有効なことを確認したあとでのみ、もう一度追加するようにしてください。

この変更を行う別の方法に、ulimit –n "value" コマンドの使用があります。このコマンドを使用した場合、システムの再起動は必要ありません。ただし、このコマンドではログインシェルだけが変更されます。これに対して、etc/system ファイルの編集はすべてのシェルに影響します。

HTTP サーバーへの接続の失敗

サーバーの負荷が高いときに、ブラウザから Web Server への接続タイムアウトが発生している場合は、HTTP リスナーのバックログキューのサイズを増やすことができます。この設定を増やすには、HTTP リスナーの待機キューの値を編集します。

また、この設定に加えて、Solaris TCP/IP ネットワークコード内の制限も増やしてください。次のコマンドを実行することによって変更される 2 つのパラメータが存在します。

/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q 8192
/usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q0 8192

これらの 2 つの設定によって、待機中の接続でいっぱいになる可能性のある 2 つの Solaris 待機キューの最大数が増えます。tcp_conn_req_max_q によって、accept() 呼び出しからの復帰を待っている完了した接続の数が増えます。tcp_conn_req_max_q0 によって、ハンドシェークが未完了の接続の最大数が増えます。デフォルト値はそれぞれ、128 と 1024 です。これらの ndd コマンドがシステムの再起動のたびに自動的に実行されるようにするには、そのコマンドを /etc/init.d/network-tuning という名前のファイルに格納し、そのファイルへのリンクを /etc/rc2.d/S99network-tuning という名前で作成します。

これらの変更の効果は、netstat -s コマンドを使用し、tcpListenDroptcpListenDropQ0、および tcpHalfOpenDrop 値を確認することによって監視できます。調整を行う前に、これらの値を確認してください。これらの値が 0 でない場合は、最初に 2048 に調整し、netstat 出力の監視を続けます。

Web Server HTTP リスナーの待機キューの設定と、それに関連する Solaris の tcp_conn_req_max_qtcp_conn_req_max_q0 の設定は Web Server のスループットに一致するはずです。これらのキューは、Web ユーザーから受信した接続の不規則な比率を管理するための「バッファー」として機能します。これらのキューによって、Solaris はそれらの接続を受け付け、それらが Web Server によって処理されるまで保持することができます。

Web Server が処理できる量より多くの接続を受け付ける必要はありません。これらのキューのサイズを制限し、過剰な接続を受け付けたために接続に対応できなくなるより過剰な接続を拒否することをお勧めします。一般に、これらの 3 つのパラメータの値を 2048 に設定すると接続要求の失敗が減少し、4096 までの値でパフォーマンス向上が確認されています。

この調整はどの Web ホスティング環境にも悪影響を与えないと予測されているため、システムが前述の症状を示していない場合でも、この提案を検討できます。

接続拒否のエラー

負荷の高いサーバーで接続拒否のエラーが発生している場合は、そのサーバー上でのネットワーク資源の使用をチューニングすることができます。

TCP/IP 接続が閉じられていると、そのポートは tcp_time_wait_interval (デフォルト値は 240000 ミリ秒) の間再利用されません。これは、残されたセグメントが発生しないようにするためです。tcp_time_wait_interval が小さければ小さいほど、貴重なネットワーク資源が早くふたたび使用可能になります。このパラメータは、次のコマンドを実行することによって変更されます。ただし、60000 未満にはしないでください。

usr/sbin/ndd -set /dev/tcp tcp_time_wait_interval 60000

この ndd コマンドがシステムの再起動のたびに自動的に実行されるようにするには、そのコマンドを /etc/init.d/network-tuning という名前のファイルに格納し、そのファイルへのリンクを /etc/rc2.d/S99network-tuning という名前で作成します。

システムが先に述べた症状を示しておらず、TCP プロトコルのチューニングにも精通していない場合は、前述のパラメータを変更しないようにすることをお勧めします。

TCP バッファリングのチューニング

継続的に負荷の高いサーバーからのネットワーク応答に、予測不可能な速度低下がときどき見られる場合は、/etc/system ファイルに次の行を追加することによって sq_max_size パラメータの設定を調査することもできます。

set sq_max_size=512

この設定は、パケットをハードウェアドライバから TCP/IP プロトコルドライバに転送する同期キューのサイズを調整します。512 の値を使用すると、キューがオーバーフローすることなく、大量のネットワークトラフィックを格納できるようになります。

Solaris Network Cache and Accelerator (SNCA) の使用

Solaris Network Cache and Accelerator (SNCA) は、Solaris オペレーティングシステムでの Web パフォーマンスを向上させるキャッシュサーバーです。

Web Server が実行されているシステムでは SNCA が設定されていることが前提になります。SNCA およびその構成とチューニングの詳細については、各システムの次のマニュアルページを参照してください。

ProcedureSNCA を Web Server と連動させる

前述したように、この手順は SNCA が設定されていることを前提にしています。

  1. 「共通操作」ページで、構成を選択し、「構成を編集」をクリックします。

  2. 「HTTP リスナー」タブをクリックし、編集する HTTP リスナーを選択します。

  3. 「HTTP リスナーの編集」ページで、「プロトコルファミリ」を nca に設定します。

    これが機能するには、HTTP リスナーがポート 80 上で待機している必要があります。

  4. 変更を保存します。

  5. 「パフォーマンス」タブをクリックします。

  6. 「キャッシュ」サブタブをクリックします。

  7. 「キャッシュ設定」ページで、ファイルキャッシュが有効になっていることを確認し、「Sendfile を使用」を有効にします。

  8. 変更を保存します。

  9. 変更を有効にするには、構成を再配備します。

最大スレッド数とキューサイズ

Web Server を SNCA とともに使用するように設定する場合は、スレッドプールを無効にするとパフォーマンスが向上します。これらの設定は、構成の「パフォーマンス」タブ ⇒「HTTP」サブタブの「スレッドプール設定」の下にあります。スレッドプールを無効にするには、「スレッドプール」の「有効」チェックボックスを選択解除します。また、wadm set-thread-pool-prop コマンドの enabled プロパティーを使用してスレッドプールを無効にすることもできます。

SNCA 以外の構成で、特に、キープアライブなしで短い待ち時間の応答を実現する必要がある場合にも、スレッドプールを無効にすることができます。

Solaris ファイルシステムのチューニング

ここでは、ファイルシステムのチューニングのために行うことのできる変更について説明します。この節は次の問題に対応したトピックを含みます。

次のパラメータの説明を注意して読んでください。その説明が状況に一致している場合は、調整を行うことを検討します。

ファイルシステムのページイン率が高い

Solaris 8 または 9 でファイルシステムのページイン率が高い場合は、segmap_percent の値を増やすと効果が得られる可能性があります。このパラメータは、/etc/system ファイルに次の行を追加することによって設定されます。

set segmap_percent=25

segmap_percent は、カーネルがファイルシステムキャッシュ用のアドレス空間にマップするメモリーのパーセンテージを調整します。デフォルト値は 12 です。つまり、カーネルは、ファイルシステムキャッシュ用にメモリーの最大 12% をマップするための十分な空間を予約します。4G バイトの物理メモリーを備えた負荷の高いマシンでは、60 までの値でパフォーマンス向上が確認されています。25 程度から始めて、この値を試すようにしてください。大量の物理メモリーを備えたシステムでは、カーネルメモリーの要件を大幅に増加させる場合があるため、この値は少しずつ増やすようにしてください。

ファイルシステムの状態監視の削減

UNIX ファイルシステム (UFS) ボリュームには、各ファイルがアクセスされた時刻が保持されています。次の変更を行なっても、ファイルを変更したときのアクセス更新時刻は無効にならず、ファイルにアクセスしたときのアクセス更新時刻だけが無効になることに注意してください。使用する環境でファイルのアクセス更新時刻が重要でない場合は、/etc/vfstab 内のデータボリュームのマウントポイントに noatime パラメータを追加することによって無効にすることもできます。次に例を示します。

/dev/dsk/c0t5d0s6 /dev/rdsk/c0t5d0s6 /data0 ufs 1 yes noatime

ビジー状態のディスクまたはボリュームのサービス時間が長い

Web Server の応答性は、ディスクサブシステムのパフォーマンスに大きく依存します。ディスクのビジー状態と、入出力要求が完了する速度を監視するには、iostat ユーティリティーを使用します (それぞれ、%b および svc_t 列)。ビジー状態が約 30% 未満のディスクではサービス時間は重要でありませんが、それよりビジー状態の高いディスクではサービス時間が約 20 ミリ秒を超えないようにするべきです。ビジー状態のディスクのサービス時間が長い場合は、ディスクのパフォーマンス向上が Web Server のパフォーマンス向上に大きく役立つ可能性があります。

最初の手順は、負荷を均衡させることです。一部のディスクがビジー状態にある一方で、ほかのディスクの負荷が軽い場合は、ビジー状態のディスクの一部のファイルをアイドル状態のディスクに移動します。不均衡がある場合は、通常、それを修正するほうが過負荷のディスクをチューニングしようとするよりはるかにメリットがあります。

Solaris プラットフォーム固有のパフォーマンス監視

ここでは、システム動作の監視に使用できる Solaris 固有のツールおよびユーティリティーのいくつかについて説明します。この章の内容は、次のとおりです。

ここで説明されているツールは、Web Server によって生成される負荷にシステムがどのように応答するかという観点からパフォーマンスを監視します。Web Server の独自の機能を使用して、ユーザーが Web Server 自体に出した要求を追跡する方法については、「サーバーパフォーマンスの監視」を参照してください。

短期的なシステム監視

Solaris は、システム動作の「スナップショット」を作成するためのいくつかのツールを提供しています。その出力をファイル内に取得してあとで分析することは可能ですが、次に示すツールは、主にリアルタイムでシステム動作を監視することを目的としています。

長期的なシステム監視

前述のツールを使用してシステム性能を「抜き打ち検査する」だけでなく、傾向を検出できるように、より長期的なパフォーマンス履歴を収集することが重要です。少なくとも、正常に実行されているシステムのベースライン記録によって、システムのパフォーマンスが低下し始めた場合に、変更があった内容を調査するのに役立つ可能性があります。システムアクティビティーのレポートパッケージを有効にするには、次の手順に従います。

「インテリジェント」監視

SE ツールキットは、Sun のパフォーマンス専門家によって開発された、無料でダウンロード可能なソフトウェアパッケージです。生のパフォーマンス統計の収集と監視に加えて、このツールキットでは、システムの全体的な健全性や、調整を必要とする重要な領域を特徴づけるために、ヒューリスティックを適用できます。このツールキットとマニュアルは、次の場所からダウンロードできます。

http://www.sunfreeware.com/setoolkit.html

Solaris 10 プラットフォーム固有のチューニング情報

DTrace は、Solaris オペレーティング環境用の総合的な動的トレースフレームワークです。DTrace ツールキットを使用してシステムを監視できます。このツールキットは、次の URL から入手できます。

http://www.opensolaris.org/os/community/dtrace/dtracetoolkit/

パフォーマンスベンチマークのための Solaris のチューニング

次の表は、パフォーマンスとスケーラビリティーのベンチマークに使用される、Solaris 用のオペレーティングシステムチューニングを示しています。これらの値は、希望する結果を達成するためにシステムをチューニングする場合の例を示しています。

表 4–1 パフォーマンスベンチマークのための Solaris のチューニング

パラメータ 

スコープ 

デフォルト値 

チューニング値 

コメント 

rlim_fd_max

/etc/system

65536 

65536 

オープンファイル記述子の制限を処理します。関連付けられたソケット、ファイル、パイプ (存在する場合) などで予測される負荷を考慮するべきです。 

sq_max_size

/etc/system

ストリームドライバのキューサイズを制御します。0 に設定すると無限大になるため、バッファー領域の不足によってパフォーマンスが影響されることはありません。クライアントにも設定します。sq_max_size を 0 に設定すると、ネットワークトラフィック負荷の高い本稼動システムにとって最適ではない可能性があることに注意してください。

tcp_time_wait_interval

ndd /dev/tcp

240000 

60000 

クライアントにも設定します。 

tcp_conn_req_max_q

ndd /dev/tcp

128 

1024 

 

tcp_conn_req_max_q0

ndd /dev/tcp

1024 

4096 

 

tcp_ip_abort_interval

ndd /dev/tcp

480000 

60000 

 

tcp_keepalive_interval

ndd /dev/tcp

7200000 

900000 

アクセスの多い Web サイトでは、この値を低く設定します。 

tcp_rexmit_interval_initial

ndd /dev/tcp

3000 

3000 

再転送率が 30 〜 40% を超える場合は、必ずこの値を大きくしてください。 

tcp_rexmit_interval_max

ndd /dev/tcp

240000 

10000 

 

tcp_rexmit_interval_min

ndd /dev/tcp

200 

3000 

 

tcp_smallest_anon_port

ndd /dev/tcp

32768 

1024 

クライアントにも設定します。 

tcp_slow_start_initial

ndd /dev/tcp

データが少量であればやや高速に転送します。 

tcp_xmit_hiwat

ndd /dev/tcp

8129 

32768 

送信バッファーを増やすため。 

tcp_recv_hiwat

ndd /dev/tcp

8129 

32768 

受信バッファーを増やすため。 

パフォーマンスベンチマークのための UltraSPARC® T1 ベースシステムのチューニング

チューニング可能なパラメータとその他のパラメータの組み合わせを使用して、パフォーマンスベンチマークのためにシステムをチューニングします。これらの値は、希望する結果を達成するためにシステムをチューニングする場合の例を示しています。

オペレーティングシステムと TCP 設定のチューニング

次の表は、UtraSPARC T1 ベースシステム (64 ビットシステム) 上のパフォーマンスとスケーラビリティーのベンチマークに使用される、Solaris 10 用のオペレーティングシステムチューニングを示しています。

表 4–2 パフォーマンスベンチマークのための 64 ビットシステムのチューニング

パラメータ 

スコープ 

デフォルト値 

チューニング値 

コメント 

rlim_fd_max

/etc/system

65536 

260000 

オープンファイル記述子の制限を処理します。関連付けられたソケット、ファイル、パイプ (存在する場合) などで予測される負荷を考慮するべきです。 

hires_tick

/etc/system

 

 

sq_max_size

/etc/system

ストリームドライバのキューサイズを制御します。0 に設定すると無限大になるため、バッファー領域の不足によってパフォーマンスが影響されることはありません。クライアントにも設定します。sq_max_size を 0 に設定すると、ネットワークトラフィック負荷の高い本稼動システムにとって最適ではない可能性があることに注意してください。

ip:ip_squeue_bind

   

 

ip:ip_squeue_fanout

   

 

ipge:ipge_taskq_disable

/etc/system

 

 

ipge:ipge_tx_ring_size

/etc/system

 

2048 

 

ipge:ipge_srv_fifo_depth

/etc/system

 

2048 

 

ipge:ipge_bcopy_thresh

/etc/system

 

384 

 

ipge:ipge_dvma_thresh

/etc/system

 

384 

 

ipge:ipge_tx_syncq

/etc/system

 

 

tcp_conn_req_max_q

ndd /dev/tcp

128 

3000 

 

tcp_conn_req_max_q0

ndd /dev/tcp

1024 

3000 

 

tcp_max_buf

ndd /dev/tcp

 

4194304 

 

tcp_cwnd_max

ndd/dev/tcp

 

2097152 

 

tcp_xmit_hiwat

ndd /dev/tcp

8129 

400000 

送信バッファーを増やすため。 

tcp_recv_hiwat

ndd /dev/tcp

8129 

400000 

受信バッファーを増やすため。 

IPGE ドライバのバージョンは 1.25.25 にしてください。

ディスク構成

HTTP アクセスがログに記録されている場合は、ディスクに関する次のガイドラインに従ってください。

ネットワーク構成

複数のネットワークインタフェースカードが使用されている場合は、ネットワーク割り込みがすべて同じコアに行かないようにする必要があります。割り込みを無効にするには、次のスクリプトを実行します。


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

すべてのネットワークインタフェースを 1 つのグループに配置します。次に例を示します。


$ifconfig ipge0 group webserver
$ifconfig ipge1 group webserver

Web Server の起動オプション

場合によっては、大きいページサイズの使用によってパフォーマンスが向上することがあります。32 ビットの Web Server を 4M バイトページで起動するには、次のコマンドを入力します。

LD_PRELOAD_32=/usr/lib/mpss.so.1 ; export LD_PRELOAD_32; export MPSSHEAP=4M; ./bin/startserv; unset LD_PRELOAD_32; unset MPSSHEAP

64 ビットサーバーの場合は、次のコマンドを入力します。

LD_PRELOAD_64=/usr/lib/64/mpss.so.1; export LD_PRELOAD_64; export MPSSHEAP=4M; ./bin/startserv; unset LD_PRELOAD_64; unset MPSSHEAP