Apache チューニングの基本

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データベースもメモリを使うので、本当はもっと必要です。
あまり認識されていませんが、意外と同時アクセスできないものです。

コメントを残す