Apache チューニングの基本的な考え方と設定について書きます。
(1) 基本的な考え方
ホームページのレスポンスを良くするには、まずは KeepAlive On!
そしてあとは MaxClient の調整。
これが基本です。
KeepAlive の正しいドキュメントはこれですが↓
http://httpd.apache.org/docs/2.2/ja/mod/core.html#keepalive
本来 KeepAlive とは一定時間接続をキープするという設定です。
接続をキープする時間を KeepAliveTimeout で設定します。
HTMLファイルとその中のimgタグは別リクエストなのは周知の事実ですが、それを踏まえて上記のマニュアルを見てください。
On にすると、複数のリクエストが(imgタグも)同じ TCP の接続で送られます。
逆に Off だと1リクエスト毎に(imgタグ毎に)1接続ずつ必要です。
接続をキープする時間が長すぎるとホームページから去った人の接続も解放されず溜まっていきます。
それはそれで問題で、KeepAliveTimeout 2 くらいがよいとされています。
メモリ不足やCPU負荷との戦いは、とにもかくにも MaxClient (同時接続数)の調整、これに尽きます。
(帯域制限を考えなければならないときは、外部の拡張モジュールなどを使わないと標準では制御できません。)
MaxClient は同時接続数上限 = 同時アクセス数上限 = Apacheのプロセス数の上限です。
サーバー側で Apache1プロセスは順番に1つ1つ終わったら次、そして終わったら次へとなら複数回の接続を処理できますが、同時には1接続しかできないため、同時アクセス数 = プロセス数 になります。
(2) 基本的な設定
メインの設定
/etc/httpd/conf/httpd.conf
KeepAlive On KeepAliveTimeout 2 <IfModule prefork.c> ... ... ServerLimit 100 ※MaxClientsと同じにする MaxClients 100 ※メモリに応じ 100 程度から調整 MaxRequestsPerChild 1000 ※メモリリークを抑えるため 1000以下 </IfModule>
CentOS6の標準の状態だと Apache は1プロセスで数メガのメモリを消費します。
WordPressを使っていてプラグインが多いともっと(例えば10M以上)メモリを消費します。
10M × プロセス数(同時アクセス数) のメモリが必要だと仮定すると同時に 200 のアクセスがあると 2000M (2G) のメモリが必要です。
WordPressのホームページだとMySQLデータベースもメモリを使うので、本当はもっと必要です。
あまり認識されていませんが、意外と同時アクセスできないものです。