|
||||||||||||||||||||||||
| 前のページ 1 2 3 | ||||||||||||||||||||||||
| Apacheのチューニングのポイント | ||||||||||||||||||||||||
|
Webページを公開したが表示速度が遅いと感じたら、Apacheのチューニング項目をいくつか試してみましょう。余計な設定や不要なモジュールを読み込まないような設定も有効ですし、パラメータによっても性能が向上する可能性があります。 |
||||||||||||||||||||||||
| abでApacheのベンチマークを測定する | ||||||||||||||||||||||||
|
Apacheにはベンチマークを測定するab(Apache Bench)というツールが付属しています。Apacheをチューニングする場合、このabを利用しアクセス速度を測定し、チューニングの前後でどの程度変化があるのか比較するようにしましょう。abの構文は「ab <オプション> <リソースURL>」となります。abで使える代表的なオプションは表6のとおりです。 オプションの中で特に重要な項目はKeepAliveを有効にする -k オプションです。KeepAliveについては後ほど解説します。他にもさまざまなオプションが用意されています。詳しくは ab -h で参照することが可能です。
表6:abで使える代表的なオプション リスト1:設定ファイルの追記
<Location /server-status>
|
||||||||||||||||||||||||
| abの注意点 | ||||||||||||||||||||||||
|
abは単一リソースに指定された回数リクエストするだけで、画面遷移など実際にユーザから利用される環境を再現することはできません。 また、Webサーバと同じマシンでabを実行すると測定が不正確になります。なぜなら、abとWebサーバどちらもシステムリソースを消費するため、別マシンで実行するより結果が悪くなってしまう恐れがあるからです。Webサーバとabを実行するマシンは分けたほうがよいでしょう。 |
||||||||||||||||||||||||
| 不要な設定を削除する | ||||||||||||||||||||||||
|
Apacheはさまざまなモジュールが追加できます。しかしモジュールをたくさん入れすぎると性能が低下する可能性があります。またディレクティブに複雑な設定を書いたり、必要のない正規表現を多用したり、「.htaccess」の利用や「DNS検索」も性能低下につながります。 |
||||||||||||||||||||||||
| .htaccess | ||||||||||||||||||||||||
|
ディレクトリごとに設定ファイル(.htaccessファイル)を作成することで、Apache設定ファイルの設定内容を上書きできます。しかし、.htaccessを利用するとApacheの性能が大幅に低下します。そのため、.htaccessはできるだけ利用しないほうがよいでしょう。利用する場合は、.htaccessが必要なディレクトリ以外では.htaccessを探さないように設定してください。 |
||||||||||||||||||||||||
| DNS検索 | ||||||||||||||||||||||||
|
HostNameLooksupsディレクティブは、クライアントのIPアドレスをログを出力したり、CGIプロセスを実行するたびにクライアントのIPアドレスを名前に変換することができます。本ディレクティブをONにした場合、不必要なDNS参照のトラフィックが増加します。必要がなければ基本的にデフォルトのOffのままがよいでしょう。 |
||||||||||||||||||||||||
| 待ち受けプロセス数を調整する | ||||||||||||||||||||||||
|
Apacheは複数クライアントからの接続を同時に処理するため、複数プロセスで動作し、それぞれのプロセスがアクセスを待ちます。このプロセスを最大いくつまで作るのかを設定するのがMaxClientsディレクティブです。設定は「MaxClients 」となります。 例えば、1プロセスでメモリを4MB使用する場合、150クライアントでは600MBのメモリが必要となります。これが物理メモリを超えると著しくパフォーマンスが低下してします。逆に最大プロセス数が少なすぎると、処理待ちが発生してしまいます。そのため、サーバでどれだけのリソースが消費されているかを「top」コマンドや「free」コマンドで調査する必要があります。 一般的に、アクセス数が膨大でないサイトの場合、MaxClientsは100〜200程度、MaxSpareServersはMaxClientsの10%〜30%程度、MinSpareServersはMaxSpareServersの半分程度にするのが一般的です。 また待ち受け調整に関するディレクティブには、Apache起動時に生成されるプロセス数を設定する「StartServers」や、待ち受け中の最小プロセス数を設定する「MinSpareServers」、待ち受け中の最大プロセス数を設定する「MaxSpareServers」があります。 |
||||||||||||||||||||||||
| KeepAliveの設定を調整する | ||||||||||||||||||||||||
|
HTTPのデフォルトの動作はリクエストのたびに新しい接続を作成します。そのため、リクエスト単位でTCP接続のオープン/クローズを行うオーバーヘッドが発生します。KeepAliveを有効にすると、1つの接続で複数の要求を実現することが可能になり、TCP接続を確立するために費やす時間を削減できます。KeepAliveディレクティブは「KeepAlive 」と設定します。オプションの部分にはonとoffのどちらかを指定できます。 キープアライブを調整するディレクティブには、1つのTCP接続に対してリクエスト数の上限を設定する「MaxKeepAliveRequests」と、TCP接続のタイムアウト時間を設定する「KeepAliveTimeout」があります。 |
||||||||||||||||||||||||
| MaxKeepAliveRequestsに設定する値 | ||||||||||||||||||||||||
|
MaxKeepAliveRequestsディレクティブを「MaxKeepAliveRequests 200」とすると、リクエストを200件まで受け付けるようになり、200件を超えると別のTCP接続が確立されます(デフォルトは100)。大きな値を設定すると、一度に処理できるリクエスト数が大きくなります。しかし、ほかの接続が割り込むタイミングが遅れます。そのため一般的にMaxKeepAliveRequestsには「1ページ当たりの平均ファイル数+α」とするとよいとされています。 |
||||||||||||||||||||||||
| KeepAliveTimeout | ||||||||||||||||||||||||
|
KeepAliveTimeoutを「KeepAliveTimeout 20」と設定すると1つのTCP接続は20秒間保持され、20秒以内に次のリクエストが届かなかった場合、TCP接続は自動的にCloseされます。KeepAliveTimeoutの値を大きな値に設定すると、多数のプロセスがキープアライブ状態になり、静止状態になってしまいます。 逆に、KeepAliveTimeoutの値が小さすぎると完全にKeepAliveを無効にした場合と同様の状態になってしまいます。一般的に「1ページ当たりの平均転送時間+α」を設定するのがよいでしょう。基本的にデフォルトの15で問題ありませんが、ユーザ環境やページ内容によって大きく変化するので、少しずつ減らしながらabで状況を確認して調整してください。 |
||||||||||||||||||||||||
| Apacheの動作状況をWebブラウザで確認する | ||||||||||||||||||||||||
|
Apacheの設定を変更後、実際にサイトを稼動させたらWebブラウザから動作状況を確認してみましょう。Webブラウザに同時アクセス数や、プロセスの状態などの情報を表示することができます。設定ファイルにリスト1の記述を追加してください。 追記後、設定ファイルをApacheに反映させ、「http://ApacheのIPアドレス/server-status」にアクセスしてください。サーバの状態がWebブラウザに表示されます。また、URLに「-auto」をつけると簡易形式で表示することも可能です。 |
||||||||||||||||||||||||
| チューニングポイントのまとめ | ||||||||||||||||||||||||
|
チューニングにおける重要なポイントは、同時に複数の設定を変更するのではなく、1つずつ設定を変えて、abでベンチマークし、どのように変化したかをチェックすることです。環境に合わせて最適なパフォーマンスを出せるように、いろいろと試してみてください。 |
||||||||||||||||||||||||
| まとめ | ||||||||||||||||||||||||
|
今回はApache設定ファイルの書き方や代表的なディレクティブを紹介しました。また、パフォーマンスチューニングのポイントについて解説しました。本連載も今回が最後となりました。最後までお付き合いいただきありがとうございました。 |
||||||||||||||||||||||||
|
前のページ 1 2 3 |
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||

