Apache設定ファイルをチューニング

Apache + mod_perl の場合、httpd.conf でいろいろと気をつけるべき点があるのですが、まとめてみました。ちなみに本サーバの設定値は、

サーバスペックが Pentium 4 2.8GHz HT動作 / RAM 2GByte
な環境で、Amazon Search が喰うメモリは mod_perl 動作で 1 httpd あたり 10〜40MByte 程度。サーバライブラリがある条件下でメモリーリークするので、最大で httpd は 100Mbyte 程度まで肥大。

という条件下で

 KeepAlive Off
 Timeout 60
 MinSpareServers 10
 MaxSpareServers 10
 StartServers 10
 MaxClients 50
 MaxRequestsPerChild 50

という設定値になっています。各パラメータの値の意味を説明しますと、

Timeout リクエスト待ち時間。mod_perl で動作させたい CGI なら数秒で処理完了するハズなので、60 秒もあれば程度で十分
* GET リクエストを受け取るのにかかる総時間
* POST や PUTリクエストにおいて、次の TCP パケットが届くまでの待ち時間
* レスポンスを返す際、TCP の ACK が帰ってくるまでの時間
KeepAlive mod_perl なら Off にする。mod_perl で http session を維持するのはNG。
MinSpareServers あらかじめ待機させておく httpd の最少数。Apache は定期的に httpd の起動プロセス数を監視し、この値を下回っていた場合は自動的に httpd が起動される。
MaxSpareServers あらかじめ待機させておく httpd の最大数。Apache は定期的に httpd の起動プロセス数を監視し、この値を上回っていた場合は自動的に httpd が停止される。
StartServers Apache 起動時に立ち上げるhttpdの数の設定。MinSpareServers と同一の値を設定する。
MaxClients 同時に起動できる httpd の総数。値の算出方法は、(実メモリ / Apache の最大メモリ消費量)で算出できる。
Apache の最大メモリ消費量は、MaxClients×子プロセスのメモリ消費量+親プロセスのメモリ消費量で算出できる。 子プロセスのメモリ消費量+親プロセスのメモリ消費量は、TOP コマンドで httpd の SIZE と SHARE の最大値を取得すれば良い。
ちなみに本サーバの場合、2G/(100M-40M) = 30 だが、いつもメモリ消費量が最大の 100M でもないので、50 という結果で値を設定している。
MaxRequestsPerChild 各 httpd プロセスが処理できるリクエストの最大数を設定します。指定された数のリクエストを処理すると、httpd プロセスは終了します。通常値は 0 でプロセスは限りなく動き続けるが、メモリーリーク等で httpd が肥大する場合は、適宜 httpd プロセスを再生成させるために適切な値を設定する。
ちなみに本サーバの場合、50 リクエストほどで、httpd が 100M を超えるので、その時点でプロセス終了をさせている。

以上のパラメータを自分の環境に合わせて適宜設定することで、swap も発生させず最適なパフォーマンスを提供可能となる。いろいろと取得すべき値が多いので面倒ですが、是非試してみて下さい。
- スポンサーリンク -

- スポンサーリンク -