Proxy Server 環境におけるパフォーマンスには、プロキシクライアント、Proxy Server、配信元サーバー、ネットワークなど、多数の要素が影響を与えます。この付録では、Proxy Server のパフォーマンスを向上させるために実行できる調整について説明します。
この付録は、上級管理者のみを対象としています。サーバーの調整を行う場合は細心の注意を払い、変更前に必ず設定ファイルをバックアップするようにしてください。
この付録は、次の節で構成されています。
この節では、Proxy Server のパフォーマンスを分析するときに考慮する一般的な領域について説明します。
ここでは、次の内容について説明します。
アクセスログを無効にすると、Proxy Server のパフォーマンスが向上する場合があります。ただし、Proxy Server にアクセスしているユーザーや、ユーザーの要求しているページに関する情報を確認できなくなるため、不便も生じます。
Proxy Server のアクセスログは、obj.conf ファイルで次の指令をコメントアウトすることで無効にできます。
Init fn=“flex-init” access=“$accesslog” format.access=“%Ses->client.ip% - %Req->vars.auth-user% [%SYSDATE%] \\”%Req->reqpb.clf-request%\\“ %Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%”...AddLog fn=“flex-log” name=“access”
デフォルトでは、Proxy Server によるユーザーとグループの認証の結果が、ACL ユーザーキャッシュに保存されます。magnus.conf ファイルの ACLCacheLifetime 指令を使用して、ACL ユーザーキャッシュを有効にする期間を制御することができます。キャッシュのエントリが参照されるたびにその経過時間が計算され、ACLCacheLifetime と照合されます。経過時間が ACLCacheLifetime と同じか、それよりも長い場合、このエントリは使用されません。
ACLCacheLifetime のデフォルト値は 120 秒です。これは、Proxy Server と LDAP サーバーの同期が 2 分間にわたってとられない可能性があることを意味しています。この値を 0 (ゼロ) に設定すると、キャッシュがオフになり、Proxy Server はユーザー認証のたびに LDAP サーバーに照会することになります。アクセス制御を実装する場合、この設定は Proxy Server のパフォーマンスに悪影響を及ぼします。ACLCacheLifetime に大きな値を設定した場合、LDAP エントリに変更を行うたびに Proxy Server を再起動する必要が生じる可能性もあります。この設定によって Proxy Server が LDAP サーバーに問い合わせるようにするためです。LDAP ディレクトリが頻繁に変更される可能性が低い場合にだけ、大きな値を設定します。
ACLUserCacheSize は、キャッシュ内に保持できるエントリの最大数を設定する magnus.conf のパラメータです。このデフォルト値は 200 です。新しいエントリがリストの先頭に追加され、キャッシュが最大サイズに達すると、新しいエントリが追加できるように、このリストの末尾のエントリが再利用されます。
また、ACLGroupCacheSize パラメータを使用して、ユーザーエントリごとにキャッシュできるグループメンバーシップの最大数を設定することもできます。デフォルト値は 4 です。ただし、グループのメンバーではないユーザーはキャッシュされないため、要求ごとに何回か LDAP ディレクトリにアクセスすることになります。
サーバーのソケットの送信バッファー (SndBufSize) と受信バッファー (RcvBufSize) のサイズを指定できます。これらのパラメータは、magnus.conf ファイルで設定できます。推奨される値は UNIX や Linux オペレーティングシステムの種類によって異なります。これらのパラメータの適切な設定値については、オペレーティングシステムのマニュアルを参照してください。
magnus.conf ファイル内の AcceptTimeout パラメータを使用すると、接続をクローズする前に、サーバーがクライアントからのデータの到着を待機する秒数を指定できます。タイムアウトの制限時間内にデータが届かない場合、接続がクローズされます。デフォルトでは、30 秒に設定されています。ほとんどの環境では、この設定を変更する必要はありません。この値をデフォルトよりも少なく設定してスレッドを解放することもできますが、接続に時間のかかるユーザーが切断されてしまう可能性もあります。
server.xml() ファイルの LOG タグにある loglevel 属性の値を大きくすると、サーバーがエラーログに生成して格納する情報量が多くなります。ただし、このファイルにエントリを書き込むときのパフォーマンスに影響を与えます。ログレベルを大きくするのは問題をデバッグするときだけにして、障害追跡モード以外の場合はログレベルを最小に設定します。
SSL を有効にすると Proxy Server のプライバシーとセキュリティーが向上しますが、パケットの暗号化と復号化によってオーバーヘッドが発生するため、パフォーマンスに影響を与えます。ハードウェアアクセラレータカードに対する暗号化および復号化処理の負荷を低減させることを考慮してください。
Proxy Server キャッシュはランダムアクセスメモリーには保存されません。キャッシュからドキュメントが取り出されるたびに、ファイルシステムに対してファイルアクセスが行われます。Solaris のファイルシステムキャッシュを使用して、Proxy Server キャッシュをメモリーにプリロードしてください。これによって、キャッシュされたファイルへの参照が、ファイルシステムではなくメモリーから取り出されるようになります。
タイムアウトは、サーバーのパフォーマンスに大きく影響します。Proxy Server に対して最適なタイムアウトを設定することは、ネットワークリソースの節約に役立ちます。
2 つのインスタンス固有の SAF (サーバーアプリケーション関数) と、1 つのグローバルパラメータを使用して、Proxy Server 内のタイムアウト値を設定することができます。
init-proxy() 関数は、Proxy Server の内部設定を初期化します。この関数は Proxy Server の初期化時に呼び出されますが、値が正しく初期化されるように obj.conf ファイル内で指定する必要もあります。
この関数の構文は次のとおりです。
Init fn=init-proxy timeout=seconds timeout-2=seconds
上の例では、次のパラメータを、init-proxy SAF の Proxy Server タイムアウト設定に直接適用することができます。
timeout (プロキシタイムアウト)– プロキシタイムアウトパラメータは、アイドル接続を中断するまでのサーバーの待機時間を指示します。プロキシのタイムアウトを高く設定すると、時間のかかるプロキシスレッドによってクライアントが長時間停止させられる可能性があります。タイムアウト値を低く設定すると、結果が出るまでに時間のかかる CGI スクリプト (データベースクエリーゲートウェイなど) が中断されてしまいます。
サーバーに対して最適なプロキシタイムアウトを決定するには、次の問題について検討します。
Proxy Server は、多数のデータベースクエリや CGI スクリプトを処理するか。
Proxy Server の処理する要求数が少なく、常に 1 つのプロセスに時間を割くことができるか。
上のどちらの質問に対する答えも「はい」である場合は、プロキシタイムアウトに高い値を設定することになります。プロキシタイムアウトの推奨される最高値は 1 時間です。デフォルト値は 300 秒 (5 分) です。
サーバーマネージャーの「Preferences」タブにある「Configure System Preferences」ページにアクセスすると、プロキシタイムアウトの値を表示または変更できます。このパラメータは、「Proxy Timeout」として参照されます。
timeout-2 (中断後のタイムアウト)– 中断後のタイムアウト値は、クライアントがトランザクションを中断した後、キャッシュファイルに書き込みを続行する必要のある時間を Proxy Server に指示します。つまり、Proxy Server がドキュメントのキャッシュをほぼ終了していて、クライアントが接続を中断した場合、サーバーは、中断後のタイムアウト値に達するまでドキュメントのキャシュを続行することができます。
推奨される中断後のタイムアウトの最高値は 5 分です。デフォルト値は 15 秒です。
http-client-config 関数は、Proxy Server の HTTP クライアントを設定します。
この関数の構文は次のとおりです。
Init fn=http-client-config keep-alive=(true|false) keep-alive-timeout=seconds always-use-keep-alive=(true|false) protocol=HTTP Protocol proxy-agent="Proxy-agent HTTP request header"
設定値は次のように定義されます。
keep-alive– (オプション) HTTP クライアントが持続的接続を使用するかどうかを示すブール値。デフォルトは TRUE です。
keep-alive-timeout– (オプション) 持続的接続を開いたままにしておく最大秒数。デフォルトは 29 です。
always-use-keep-alive– (オプション) すべてのタイプの要求に対して HTTP クライアントが既存の持続的接続を再使用できるかどうかを示すブール値。デフォルトは false です。つまり、GET 以外の要求またはボディーを含む要求に対しては、持続的接続は再使用されません。
protocol– (オプション) HTTP プロトコルバージョンの文字列。デフォルトでは、HTTP クライアントは、HTTP 要求のコンテンツによって HTTP/1.0 か HTTP/1.1 のどちらかを使用します。プロトコルの相互運用について特定の問題が発生しないかぎり、protocol パラメータは使用しないでください。
proxy-agent– (オプション) Proxy-agent HTTP 要求ヘッダーの値。デフォルトは、Proxy Server の製品名とバージョンを含む文字列です。
KeepAliveTimeout() パラメータは、サーバーが、クライアントと Proxy Server 間の HTTP keep-alive 接続または持続的接続を開いたままにしておく最大時間 (秒) を決定します。デフォルトは 30 秒です。アイドル時間が 30 秒を超えると、接続が切断されます。最大値は 300 秒 (5 分) です。
magnus.conf ファイル内のタイムアウト設定は、クライアントと Proxy Server 間の接続に適用されます。obj.conf ファイル内の http-client-config SAF にあるタイムアウト設定は、Proxy Server と配信元サーバー間の接続に適用されます。
Proxy Servers は、ドキュメントを配信元サーバーから取得するのではなく、ローカルキャッシュから提供することによって、パフォーマンスを向上させることができます。この方法の欠点の 1 つは、期限切れのドキュメントが提供される可能性があることです。
Proxy Server は、ドキュメントが最新のものかどうかをチェックして、ドキュメントが古い場合は、キャッシュを更新することができます。この最新状態チェックは、必要な場合のみ実行することをお勧めします。ドキュメントのチェックを頻繁に行うと、Proxy Server 全体のパフォーマンスが低下してしまう可能性があるからです。
最新状態チェックは、「Caching」タブの「Set Cache Specifics」で設定します。デフォルトは、2 時間おきに新しいドキュメントをチェックする設定になっています。この情報は、ObjectType 指令で max-uncheck パラメータを使用して設定します。
ドキュメントを最新に保ちつつ、サーバーのパフォーマンスを向上させるには、適切なドキュメントの期限とともに、last-modified 要素を特定することによって最新状態チェックをカスタマイズします。
last-modified 要素は、通知されてきたこれまでの変更に基づいて、今後のドキュメントの変更の可能性を判断するのに役立ちます。
last-modified 要素は、.02 〜 1.0 の間の割合です。ドキュメントの実際の最後の変更から最後に最新状態チェックが実行された時間までの間隔に、この割合を掛け合わせます。この結果の数字を、最後の最新状態チェックからの経過時間と比較します。この数字が間隔時間より小さい場合、ドキュメントの期限は切れていません。この数字が間隔時間より大きい場合は、ドキュメントの期限が切れており、配信元サーバーから新しいバーションを取得します。
last-modified 要素によって、最近チェックされたドキュメントを、古いドキュメントよりも頻繁にチェックするように設定できます。
last-modified 要素は、0.1 〜 0.2 の間に設定することをお勧めします。
DNS は、標準の IP アドレスをホスト名に関連付けるために使用されるシステムです。このシステムは、重要な Proxy Server リソースが適切に設定されていない場合に、占有することができます。パフォーマンスを最適化するには、次の点に注意します。
DNS キャッシュを有効にする。
DNS キャッシュを有効にするには、サーバーマネージャーの「Preferences」タブにある「Configure DNS Cache」リンクを選択します。DNS キャッシュの「Enabled」ラジオボタンを選択します。
クライアントの DNS 名をログに記録せず、IP アドレスだけを記録する。
クライアントの DNS 名のログを無効にするには、サーバーマネージャーの「Server Status」タブにある「Set Access Log Preferences」リンクを選択します。クライアントのホスト名ではなく IP アドレスをログに記録するには、「IP Addresses」ラジオボタンを選択します。
逆引き DNS を無効にする。
逆引き DNS は、IP アドレスをホスト名に変換します。逆引き DNSを無効にするには、サーバーマネージャーの「Preferences」タブにある「Configure System Preferences」リンクを選択します。逆引き DNS を無効にするには、「No」ラジオボタンを選択します。
クライアントのホスト名に基づいたアクセス制御をしない
アクセス制御文では、ホスト名ではなくクライアントの IP アドレスを使用します (可能な場合)。
magnus.conf ファイル内の RqThrottle パラメータによって、Proxy Server が同時に処理できるトランザクションの最大数を指定します。デフォルト値は 128 です。この値を変更することで、サーバー処理を低速にし、実行されるトランザクションの待ち時間を最小限に抑えることができます。
同時処理する要求数を計算するために、サーバーはアクティブな要求数をカウントし、そこに新しい要求が届いたら 1 を足し、要求が終了したら 1 を引きます。新しい要求が届いたら、サーバーは、要求の最大数がすでに処理済みであるかどうかを確認します。制限数に達してしまった場合は、アクティブな要求数が最大数を下回るまで、新しい要求の処理が延期されます。
同時処理されている要求数を監視するには、perfdump によって生成されるデータの SessionCreationInfo 部分か、proxystats.xml データを確認します。この情報から、同時処理する要求の最大数 (ピーク) を、スレッドの合計数 (制限) と比較して決定することができます。perfdump 出力で表示される情報は次のとおりです。
SessionCreationInfo: ------------------------ Active Sessions 1 Keep-Alive Sessions 0 Total Sessions Created 48/128
Active Sessions は、現在要求を処理しているセッションの数 (要求処理のスレッド) を示しています。Keep-Alive Sessions は Active Sessions と似ていますが、クライア ントが keep-alive 接続を要求している場合に特定されています。Total Sessions Created は、作成されたセッション数と許可されるセッションの最大数の両方を示しています。これらは、RqThrottle 値の最小値と最大値です。
RqThrottleMin は、サーバーが起動時に開始するスレッドの最小数です。デフォルト値は 48 です。このパラメータは magnus.conf ファイルでも設定できますが、デフォルトでは表示されません。
設定されたスレッドの最大数に達してしまってもかまいません。RqThrottle 値を反射的に増やす必要もありません。この最大限度に達したということは、サーバーがピークロード時にこれだけの数のスレッドを必要としたことを意味しています。しかし、要求がタイムリーに処理されているかぎり、サーバーは適切に調整されているといえます。ただし、この時点で接続は接続キューに入れられるため、オーバーフローする可能性もあります。perfdump 出力を定期的にチェックし、作成されたセッションの合計数がしばしば RqThrottle の最大数に接近する場合は、スレッドの制限数を大きくすることを検討してください。
適切な RqThrottle の値の範囲は、負荷によって 100 〜 500 になります。
インバウンド接続プールを調整するには、KeepAlive* と、magnus.conf 内にある次のような関連の設定を使用します。
これらのパラメータについては、『Sun ONE Web Server 6.1 SP6 Performance Tuning, Sizing, and Scaling Guide』の第 2 章を参照してください。このマニュアルは次の Web サイトから入手できます。
http://docs.sun.com/app/docs/doc/819-6516/
今回の Proxy Server のリリースでは、アウトバウンド接続プールの設定はできません。
FTP リストの幅を広げると、長いファイル名が表示できるようになるため、ファイル名の切り詰めが少なくなります。デフォルトの幅は、80 文字です。
FTP リストの幅を変更するには、サーバーマネージャーの「Preferences」タブにある「Tune Proxy」リンクを選択します。
キャッシュをうまく設定することで、サーバーのパフォーマンスを向上させることができます。キャッシュを設計する場合の留意事項は次のとおりです。
負荷を分散させる
複数のプロキシキャッシュパーティションを使用する
複数のディスクドライブを使用する
複数のディスクコントローラを使用する
Proxy Server のパフォーマンスにとって、適切なキャッシュの設定は非常に重要です。プロキシキャッシュを設計する場合に忘れてはならない最も重要なルールは、負荷を分散させることです。キャッシュは、パーティションあたり約 1G バイトに設定し、複数のディスクおよび複数のディスクコントローラ間に分散させる必要があります。こうした調整によって、単一の大きなサイズのキャッシュを使用するよりも、ファイルの作成や取得が高速になります。
キャッシュバッチ更新機能によって、指定された Web サイトからファイルをプリロードしたり、すでにキャッシュ内にあるドキュメントに対して最新状態チェックを実行したりできます。これは通常、Proxy Server 上の負荷が最も低い状態にあるときに開始されます。「Cache Batch Updates」ページから、URL のバッチを作成、編集、削除することができ、バッチの更新を有効または無効にすることができます。
バッチ更新を実行するファイルを指定することによって、オンデマンドキャッシュとは異なり、コンテンツをアクティブにキャッシュできます。Proxy Server では、現在キャッシュ内にある複数のキャッシュに対して最新状態チェックを実行したり、特定の Web サイト内の複数のファイルをプリロードしたりできます。
サーバーとプロキシによるネットワークを含む大規模なサイトでは、バッチ更新機能を使用して、指定された Web 領域をプリロードすることもできます。バッチ処理では、ドキュメント内のリンクを再帰的に下降し、コンテンツをローカルにキャッシュします。この機能はリモートサーバー上では負荷が重くなる可能性があるので、注意が必要です。再帰が無制限に実行されないような方法が取られ、bu.conf 設定ファイル内のパラメータによって、このプロセスの一部を制御できます。
Proxy Server のアクセスログを使用して、一般に最もアクティブなサイトを判別し、これらのサイトに対してバッチ更新を実行してパフォーマンスを向上させます。
ガベージコレクションは、Proxy Server のキャッシュを調査して、古い無効なファイルを削除するプロセスです。ガベージコレクションはリソース集中型のプロセスなので、パフォーマンスを向上させるために、一部のガベージコレクション設定を調整する必要がある場合もあります。
次のパラメータを使用すると、ガベージコレクションのプロセスを微調整することができます。これらのパラメータは、「Tune Garbage Collection」フォーム上で表示または変更することができます。このフォームは、サーバーマネージャーの「Caching」タブにある「Tune GC」を選択すると表示されます。パラメータは次のとおりです。
gc hi margin percent
gc lo margin percent
gc extra margin percent
gc leave fs full percent
gc hi margin percent 変数は、最大キャッシュサイズの割合を制御します。その割合に達するとガベージコレクションが開始されます。
この値は gc lo margin percent の値よりも高く設定する必要があります。
gc hi margin percent の有効な値の範囲は、10 〜 100 % です。デフォルト値は 80 % です。キャッシュが 80 % になるとガベージコレクションが開始されます。
gc lo margin percent 変数は、最大キャッシュサイズの割合を制御します。その割合に達するとガベージコレクションが開始されます。
この値は gc hi margin percent の値よりも低く設定する必要があります。
gc lo margin percent の有効な値の範囲は、5 〜 100 % です。デフォルト値は 70 % です。ガベージコレクション後にキャッシュが 70 % になった状態をターゲットとします。
パーティションのサイズが最大許容値 (gc hi margin percent) に接近したという理由以外でガベージコレクションが開始された場合、ガベージコレクタは gc extra margin percent 変数によって設定された割合を使用して、削除するキャッシュの割合を決定します。
gc extra margin percent の有効な値の範囲は、0 〜 100 % です。デフォルト値は 30 % です。既存のキャッシュファイルの 30 % を削除します。
gc leave fs full percent の値は、ガベージコレクションが実行されない範囲のキャッシュパーティションサイズの割合を決定します。この値によって、ほかのアプリケーションがディスク領域を占有していても、ガベージコレクタがキャッシュからすべてのファイルを削除しないように設定できます。
gc leave fs full percent の有効な値の範囲は、0 (完全に削除できる) 〜 100 % (何も削除しない) です。デフォルト値は 60 % です。現在の 60 % までキャッシュサイズを小さくできます。
Solaris カーネルでは、さまざまなパラメータを使用して Proxy Server のパフォーマンスを微調整できます。次の表は、これらのパラメータの一部を示しています。
表 19–1 Solaris のパフォーマンス調整パラメータ
パラメータ |
スコープ |
デフォルト値 |
調整値 |
コメント |
---|---|---|---|---|
/etc/system |
1024 |
8192 |
オープンファイル記述子の制限を処理します。予想される負荷 (存在する場合は、関連付けられたソケット、ファイル、パイプなど) を考慮してください。 |
|
/etc/system |
64 |
8192 | ||
/etc/system |
2 |
0 |
ストリームドライバのキューサイズを制限します。0 に設定すると、パフォーマンスはバッファー領域の不足による影響を受けなくなります。このパラメータはクライアント上でも設定します。 |
|
ndd/dev/tcp |
240000 |
60000 |
このパラメータはクライアント上でも設定します。 |
|
ndd/dev/tcp |
128 |
1024 | ||
ndd/dev/tcp |
1024 |
4096 | ||
ndd/dev/tcp |
480000 |
60000 | ||
tcp_keepalive_interval |
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 |
受信バッファーを増やすために使用します。 |
これらのパラメータについては、『Sun ONE Web Server 6.1 SP6 Performance Tuning, Sizing, and Scaling Guide』の第 5 章を参照してください。このマニュアルは次の Web サイトから入手できます。
http://docs.sun.com/app/docs/doc/819-6516/