この章では、プラットフォーム固有のチューニングの注意事項について説明します。この章の内容は、次のとおりです。
ここでは、その他の Solaris 固有の問題やチューニングの注意事項について説明します。この章の内容は、次のとおりです。
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 ファイルの編集はすべてのシェルに影響します。
サーバーの負荷が高いときに、ブラウザから 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 コマンドを使用し、tcpListenDrop、tcpListenDropQ0、および tcpHalfOpenDrop 値を確認することによって監視できます。調整を行う前に、これらの値を確認してください。これらの値が 0 でない場合は、最初に 2048 に調整し、netstat 出力の監視を続けます。
Web Server HTTP リスナーの待機キューの設定と、それに関連する Solaris の tcp_conn_req_max_q と tcp_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 プロトコルのチューニングにも精通していない場合は、前述のパラメータを変更しないようにすることをお勧めします。
継続的に負荷の高いサーバーからのネットワーク応答に、予測不可能な速度低下がときどき見られる場合は、/etc/system ファイルに次の行を追加することによって sq_max_size パラメータの設定を調査することもできます。
set sq_max_size=512
この設定は、パケットをハードウェアドライバから TCP/IP プロトコルドライバに転送する同期キューのサイズを調整します。512 の値を使用すると、キューがオーバーフローすることなく、大量のネットワークトラフィックを格納できるようになります。
Solaris Network Cache and Accelerator (SNCA) は、Solaris オペレーティングシステムでの Web パフォーマンスを向上させるキャッシュサーバーです。
Web Server が実行されているシステムでは SNCA が設定されていることが前提になります。SNCA およびその構成とチューニングの詳細については、各システムの次のマニュアルページを参照してください。
ncab2clf(1)
ncakmod(1)
nca(1)
snca(1)
nca.if(4)
ncakmod.conf(4)
ncalogd.conf(4)
前述したように、この手順は SNCA が設定されていることを前提にしています。
「共通操作」ページで、構成を選択し、「構成を編集」をクリックします。
「HTTP リスナー」タブをクリックし、編集する HTTP リスナーを選択します。
「HTTP リスナーの編集」ページで、「プロトコルファミリ」を nca に設定します。
これが機能するには、HTTP リスナーがポート 80 上で待機している必要があります。
変更を保存します。
「パフォーマンス」タブをクリックします。
「キャッシュ」サブタブをクリックします。
「キャッシュ設定」ページで、ファイルキャッシュが有効になっていることを確認し、「Sendfile を使用」を有効にします。
変更を保存します。
変更を有効にするには、構成を再配備します。
Web Server を SNCA とともに使用するように設定する場合は、スレッドプールを無効にするとパフォーマンスが向上します。これらの設定は、構成の「パフォーマンス」タブ ⇒「HTTP」サブタブの「スレッドプール設定」の下にあります。スレッドプールを無効にするには、「スレッドプール」の「有効」チェックボックスを選択解除します。また、wadm set-thread-pool-prop コマンドの enabled プロパティーを使用してスレッドプールを無効にすることもできます。
SNCA 以外の構成で、特に、キープアライブなしで短い待ち時間の応答を実現する必要がある場合にも、スレッドプールを無効にすることができます。
ここでは、ファイルシステムのチューニングのために行うことのできる変更について説明します。この節は次の問題に対応したトピックを含みます。
次のパラメータの説明を注意して読んでください。その説明が状況に一致している場合は、調整を行うことを検討します。
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 固有のツールおよびユーティリティーのいくつかについて説明します。この章の内容は、次のとおりです。
ここで説明されているツールは、Web Server によって生成される負荷にシステムがどのように応答するかという観点からパフォーマンスを監視します。Web Server の独自の機能を使用して、ユーザーが Web Server 自体に出した要求を追跡する方法については、「サーバーパフォーマンスの監視」を参照してください。
Solaris は、システム動作の「スナップショット」を作成するためのいくつかのツールを提供しています。その出力をファイル内に取得してあとで分析することは可能ですが、次に示すツールは、主にリアルタイムでシステム動作を監視することを目的としています。
iostat -x 60 コマンドは、ディスクパフォーマンス統計を 60 秒間隔で報告します。
各ディスクがどれだけの時間ビジー状態にあるかを調べるには、%b 列を監視します。ビジー状態がその時間の約 20% を超えるすべてのディスクでは、svct 列で報告されるサービス時間に注意してください。ほかの列では、入出力処理率、データ転送量などが報告されます。
vmstat 60 コマンドは、仮想記憶アクティビティーと一部の CPU 統計情報を 60 秒間隔で集計します。
ページ走査率を追跡し、それが高すぎる場合に対処するには、sr 列を監視します (ここでいう「高すぎる」率は、Solaris 8 および 9 とそれ以前のリリースで非常に異なることに注意)。CPU がどれだけの負荷で使用されているかを調べるには、us、sy、および id 列を監視します。アクティビティーの突然のバーストに対処するには、十分な CPU パワーを確保しておく必要があることに注意してください。また、CPU 時間について競合しているスレッドの数を調べるために、r 列も監視してください。この数が CPU の数の約 4 倍を超えたままになっている場合は、サーバーの並行性の削減が必要になることがあります。
mpstat 60 コマンドが CPU 統計情報の詳細を提供するのに対して、netstat -i 60 コマンドはネットワークアクティビティーを集計します。
前述のツールを使用してシステム性能を「抜き打ち検査する」だけでなく、傾向を検出できるように、より長期的なパフォーマンス履歴を収集することが重要です。少なくとも、正常に実行されているシステムのベースライン記録によって、システムのパフォーマンスが低下し始めた場合に、変更があった内容を調査するのに役立つ可能性があります。システムアクティビティーのレポートパッケージを有効にするには、次の手順に従います。
ファイル /etc/init.d/perf を編集し、このファイルの終わりに近い行から # のコメント文字を削除します。Solaris 10 では、次のコマンドを実行します。
svcadm enable system/sar
コマンド crontab -e sys を実行し、sa1 および sa2 コマンドを含む行から # のコメント文字を削除します。また、サイトのアクティビティープロファイルによっては、これらのコマンドを実行する頻度や時刻の調整も必要になる可能性があります。このファイルの形式の説明については、crontab のマニュアルページを参照してください。
これにより、パフォーマンスデータは /var/adm/sa ディレクトリ内のファイルに格納されるようになります。デフォルトでは、これらのファイルはここに 1 か月間保持されます。次に、sar コマンドを使用して、目的の期間の統計情報を検査することができます。
SE ツールキットは、Sun のパフォーマンス専門家によって開発された、無料でダウンロード可能なソフトウェアパッケージです。生のパフォーマンス統計の収集と監視に加えて、このツールキットでは、システムの全体的な健全性や、調整を必要とする重要な領域を特徴づけるために、ヒューリスティックを適用できます。このツールキットとマニュアルは、次の場所からダウンロードできます。
http://www.sunfreeware.com/setoolkit.html
DTrace は、Solaris オペレーティング環境用の総合的な動的トレースフレームワークです。DTrace ツールキットを使用してシステムを監視できます。このツールキットは、次の URL から入手できます。
http://www.opensolaris.org/os/community/dtrace/dtracetoolkit/
次の表は、パフォーマンスとスケーラビリティーのベンチマークに使用される、Solaris 用のオペレーティングシステムチューニングを示しています。これらの値は、希望する結果を達成するためにシステムをチューニングする場合の例を示しています。
表 4–1 パフォーマンスベンチマークのための Solaris のチューニング
パラメータ |
スコープ |
デフォルト値 |
チューニング値 |
コメント |
---|---|---|---|---|
/etc/system |
65536 |
65536 |
オープンファイル記述子の制限を処理します。関連付けられたソケット、ファイル、パイプ (存在する場合) などで予測される負荷を考慮するべきです。 |
|
/etc/system |
2 |
0 |
ストリームドライバのキューサイズを制御します。0 に設定すると無限大になるため、バッファー領域の不足によってパフォーマンスが影響されることはありません。クライアントにも設定します。sq_max_size を 0 に設定すると、ネットワークトラフィック負荷の高い本稼動システムにとって最適ではない可能性があることに注意してください。 |
|
ndd /dev/tcp |
240000 |
60000 |
クライアントにも設定します。 |
|
ndd /dev/tcp |
128 |
1024 | ||
ndd /dev/tcp |
1024 |
4096 | ||
ndd /dev/tcp |
480000 |
60000 | ||
ndd /dev/tcp |
7200000 |
900000 |
アクセスの多い Web サイトでは、この値を低く設定します。 |
|
ndd /dev/tcp |
3000 |
3000 |
再転送率が 30 〜 40% を超える場合は、必ずこの値を大きくしてください。 |
|
ndd /dev/tcp |
240000 |
10000 | ||
ndd /dev/tcp |
200 |
3000 | ||
ndd /dev/tcp |
32768 |
1024 |
クライアントにも設定します。 |
|
ndd /dev/tcp |
1 |
2 |
データが少量であればやや高速に転送します。 |
|
ndd /dev/tcp |
8129 |
32768 |
送信バッファーを増やすため。 |
|
ndd /dev/tcp |
8129 |
32768 |
受信バッファーを増やすため。 |
チューニング可能なパラメータとその他のパラメータの組み合わせを使用して、パフォーマンスベンチマークのためにシステムをチューニングします。これらの値は、希望する結果を達成するためにシステムをチューニングする場合の例を示しています。
次の表は、UtraSPARC T1 ベースシステム (64 ビットシステム) 上のパフォーマンスとスケーラビリティーのベンチマークに使用される、Solaris 10 用のオペレーティングシステムチューニングを示しています。
表 4–2 パフォーマンスベンチマークのための 64 ビットシステムのチューニング
パラメータ |
スコープ |
デフォルト値 |
チューニング値 |
コメント |
---|---|---|---|---|
/etc/system |
65536 |
260000 |
オープンファイル記述子の制限を処理します。関連付けられたソケット、ファイル、パイプ (存在する場合) などで予測される負荷を考慮するべきです。 |
|
/etc/system |
1 | |||
/etc/system |
2 |
0 |
ストリームドライバのキューサイズを制御します。0 に設定すると無限大になるため、バッファー領域の不足によってパフォーマンスが影響されることはありません。クライアントにも設定します。sq_max_size を 0 に設定すると、ネットワークトラフィック負荷の高い本稼動システムにとって最適ではない可能性があることに注意してください。 |
|
0 | ||||
1 | ||||
/etc/system |
0 | |||
/etc/system |
2048 | |||
/etc/system |
2048 | |||
/etc/system |
384 | |||
ipge:ipge_dvma_thresh |
/etc/system |
384 | ||
/etc/system |
1 | |||
ndd /dev/tcp |
128 |
3000 | ||
ndd /dev/tcp |
1024 |
3000 | ||
ndd /dev/tcp |
4194304 | |||
ndd/dev/tcp |
2097152 | |||
ndd /dev/tcp |
8129 |
400000 |
送信バッファーを増やすため。 |
|
ndd /dev/tcp |
8129 |
400000 |
受信バッファーを増やすため。 |
IPGE ドライバのバージョンは 1.25.25 にしてください。
HTTP アクセスがログに記録されている場合は、ディスクに関する次のガイドラインに従ってください。
アクセスログをより高速なディスクまたは接続されたストレージに書き込みます。
複数のインスタンスを実行している場合は、インスタンスごとのログをできるだけ別々のディスクに移動します。
ディスクの読み取り/書き込みキャッシュを有効にします。ディスクの書き込みキャッシュを有効にすると、そのディスクに障害が発生した場合、一部の書き込みが失われる可能性があることに注意してください。
次のオプションを使用してディスクをマウントすることを検討します。これにより、ディスクパフォーマンスが向上する可能性があります。nologging、directio、noatime。
複数のネットワークインタフェースカードが使用されている場合は、ネットワーク割り込みがすべて同じコアに行かないようにする必要があります。割り込みを無効にするには、次のスクリプトを実行します。
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 |
場合によっては、大きいページサイズの使用によってパフォーマンスが向上することがあります。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