TOPサーバ構築・運用> Apacheのチューニングのポイント
いまさら聞けないApache〜Webサーバ構築のキソ
いまさら聞けないApache〜Webサーバ構築のキソ

第8回:Apacheの設定とチューニングポイント

著者:ビーブレイクシステムズ  木下 喜雄   2007/12/27
前のページ  1  2  3
Apacheのチューニングのポイント

   Webページを公開したが表示速度が遅いと感じたら、Apacheのチューニング項目をいくつか試してみましょう。余計な設定や不要なモジュールを読み込まないような設定も有効ですし、パラメータによっても性能が向上する可能性があります。

abでApacheのベンチマークを測定する

   Apacheにはベンチマークを測定するab(Apache Bench)というツールが付属しています。Apacheをチューニングする場合、このabを利用しアクセス速度を測定し、チューニングの前後でどの程度変化があるのか比較するようにしましょう。abの構文は「ab <オプション> <リソースURL>」となります。abで使える代表的なオプションは表6のとおりです。

   オプションの中で特に重要な項目はKeepAliveを有効にする -k オプションです。KeepAliveについては後ほど解説します。他にもさまざまなオプションが用意されています。詳しくは ab -h で参照することが可能です。

オプション 引数 説明
-n リクエスト数 リクエストを何回繰り返すか指定します。
-c 同時発行リクエスト数 同時に出すリクエスト数を指定します。
-t タイムリミット レスポンスの待ち時間を秒で指定します。
-x 属性 HTML出力のtableタグに属性を指定します。
-y 属性 HTML出力のtrタグに属性を指定します。
-z 属性 HTML出力のtdタグに属性を指定します。
-k なし KeepAliveを有効にします。

表6:abで使える代表的なオプション

リスト1:設定ファイルの追記
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
# ここにはアクセスを許可するIPアドレスを記述します。
# 筆者の環境の場合、192.168.0.5のみ許可します。
    Allow from 192.168.0.5
</Location>


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


株式会社ビーブレイクシステムズ  木下 喜雄
著者プロフィール
株式会社ビーブレイクシステムズ  木下 喜雄
Javaスペシャリスト。前職ではCOBOL、Visual Basicを用いた大規模流通業向けシステム開発を行う。その現場で大規模システム構築時の開発効率の向上を目指してオブジェクト指向的な考え方を身につける。その後独学でJava言語を習得し、Java専業ベンダーであるビーブレイクシステムズに転職、現在は、Javaを用いた開発だけではなくお客様とのリアルコミュニケーションを実現できるマルチなエンジニアを目指し、日々奮闘中。


INDEX
第8回:Apacheの設定とチューニングポイント
  Apacheの基本的な設定・パフォーマンスチューニングのポイント
  鍵のペア作成と証明書の作成
Apacheのチューニングのポイント