Sun Java System Web Proxy Server 4.0.8 管理ガイド

第 19 章 サーバーパフォーマンスの調整

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”

ACL キャッシュの調整

デフォルトでは、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 のプライバシーとセキュリティーが向上しますが、パケットの暗号化と復号化によってオーバーヘッドが発生するため、パフォーマンスに影響を与えます。ハードウェアアクセラレータカードに対する暗号化および復号化処理の負荷を低減させることを考慮してください。

Solaris ファイルシステムキャッシュ

Proxy Server キャッシュはランダムアクセスメモリーには保存されません。キャッシュからドキュメントが取り出されるたびに、ファイルシステムに対してファイルアクセスが行われます。Solaris のファイルシステムキャッシュを使用して、Proxy Server キャッシュをメモリーにプリロードしてください。これによって、キャッシュされたファイルへの参照が、ファイルシステムではなくメモリーから取り出されるようになります。

タイムアウト値

タイムアウトは、サーバーのパフォーマンスに大きく影響します。Proxy Server に対して最適なタイムアウトを設定することは、ネットワークリソースの節約に役立ちます。

2 つのインスタンス固有の SAF (サーバーアプリケーション関数) と、1 つのグローバルパラメータを使用して、Proxy Server 内のタイムアウト値を設定することができます。

init-proxy() SAF (obj.conf ファイル)

init-proxy() 関数は、Proxy Server の内部設定を初期化します。この関数は Proxy Server の初期化時に呼び出されますが、値が正しく初期化されるように obj.conf ファイル内で指定する必要もあります。

この関数の構文は次のとおりです。

Init fn=init-proxy timeout=seconds timeout-2=seconds

上の例では、次のパラメータを、init-proxy SAF の Proxy Server タイムアウト設定に直接適用することができます。

http-client-config() SAF (obj.conf ファイル)

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"

設定値は次のように定義されます。

KeepAliveTimeout() SAF (magnus.conf ファイル)

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 要素は、通知されてきたこれまでの変更に基づいて、今後のドキュメントの変更の可能性を判断するのに役立ちます。

last-modified 要素は、.02 〜 1.0 の間の割合です。ドキュメントの実際の最後の変更から最後に最新状態チェックが実行された時間までの間隔に、この割合を掛け合わせます。この結果の数字を、最後の最新状態チェックからの経過時間と比較します。この数字が間隔時間より小さい場合、ドキュメントの期限は切れていません。この数字が間隔時間より大きい場合は、ドキュメントの期限が切れており、配信元サーバーから新しいバーションを取得します。

last-modified 要素によって、最近チェックされたドキュメントを、古いドキュメントよりも頻繁にチェックするように設定できます。

last-modified 要素は、0.1 〜 0.2 の間に設定することをお勧めします。

DNS 設定

DNS は、標準の IP アドレスをホスト名に関連付けるために使用されるシステムです。このシステムは、重要な Proxy Server リソースが適切に設定されていない場合に、占有することができます。パフォーマンスを最適化するには、次の点に注意します。

スレッドの数

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 リストの幅

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 hi margin percent 変数は、最大キャッシュサイズの割合を制御します。その割合に達するとガベージコレクションが開始されます。

この値は gc lo margin percent の値よりも高く設定する必要があります。

gc hi margin percent の有効な値の範囲は、10 〜 100 % です。デフォルト値は 80 % です。キャッシュが 80 % になるとガベージコレクションが開始されます。

gc lo margin percent 変数

gc lo margin percent 変数は、最大キャッシュサイズの割合を制御します。その割合に達するとガベージコレクションが開始されます。

この値は gc hi margin percent の値よりも低く設定する必要があります。

gc lo margin percent の有効な値の範囲は、5 〜 100 % です。デフォルト値は 70 % です。ガベージコレクション後にキャッシュが 70 % になった状態をターゲットとします。

gc extra margin percent 変数

パーティションのサイズが最大許容値 (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 の値は、ガベージコレクションが実行されない範囲のキャッシュパーティションサイズの割合を決定します。この値によって、ほかのアプリケーションがディスク領域を占有していても、ガベージコレクタがキャッシュからすべてのファイルを削除しないように設定できます。

gc leave fs full percent の有効な値の範囲は、0 (完全に削除できる) 〜 100 % (何も削除しない) です。デフォルト値は 60 % です。現在の 60 % までキャッシュサイズを小さくできます。

Solaris のパフォーマンス調整

Solaris カーネルでは、さまざまなパラメータを使用して Proxy Server のパフォーマンスを微調整できます。次の表は、これらのパラメータの一部を示しています。

表 19–1 Solaris のパフォーマンス調整パラメータ

パラメータ 

スコープ 

デフォルト値 

調整値 

コメント 

rlim_fd_max

/etc/system 

1024 

8192 

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

rlim_fd_cur

/etc/system 

64 

8192 

 

sq_max_size

/etc/system 

ストリームドライバのキューサイズを制限します。0 に設定すると、パフォーマンスはバッファー領域の不足による影響を受けなくなります。このパラメータはクライアント上でも設定します。 

tcp_close_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 

受信バッファーを増やすために使用します。 

これらのパラメータについては、『Sun ONE Web Server 6.1 SP6 Performance Tuning, Sizing, and Scaling Guide』の第 5 章を参照してください。このマニュアルは次の Web サイトから入手できます。

http://docs.sun.com/app/docs/doc/819-6516/