Apacheの限界を決めるのは「勘」ではない
こんにちは!「リナックス先生」です。
前回は鉄壁の守りを築きましたが、今回はWebサーバーの至上命題である「パフォーマンス」についてです。
先生、チューニングって難しそうです。
ネットのおすすめ設定をコピペして MaxRequestWorkers 1000 にしてみたんですけど、サーバーが固まってSSHも繋がらなくなりました…。
やっぱりメモリ増設しか手はないんでしょうか?
コピペ設定は絶対にダメよ!
サーバーのメモリ容量、WordPressのプラグイン数、OSの種類…環境によって正解は全部違うの。
今日は電卓を使って、君のサーバー専用の「パーフェクトな設定値」を算出するわよ。
1. 物理メモリから「許容接続数」を逆算する
Apacheが落ちる原因の99%は「メモリ不足によるOOM Killer(強制停止)」です。
まず、1アクセスあたりどれくらいメモリを使うかを実測します。
Step 1: プロセスの平均メモリサイズを測定
サーバーにSSH接続し、以下のコマンドを実行してください。
# httpdプロセスのメモリ使用量(RSS)を表示 ps -ylC httpd --sort:rss
※PHP-FPMを使用している場合は、php-fpm プロセスも測定して合算します。
仮定: 平均 50MB だったとします。
Step 2: 空きメモリの確認
OSやデータベース(MySQL)が使う分を除いて、Apacheにどれだけ捧げられるかを確認します。
free -m
仮定: 4GB (4000MB) のVPSで、OS+DBで1.5GB使用中。残り 2.5GB (2500MB) が利用可能。
Step 3: 黄金の計算式
利用可能メモリ (2500MB) ÷ 1プロセスのサイズ (50MB) = 50
これが、あなたのサーバーの限界値 MaxRequestWorkers = 50 です。
これを「1000」に設定すれば、メモリが溢れてサーバーが死ぬのは物理的に当然の結果なのです。
2. mpm_event.conf の完全理解
計算値を元に、/etc/httpd/conf.modules.d/00-mpm.conf (またはUbuntuのmpm_event.conf) を編集します。
単にMax値を決めるだけでなく、「アイドリング(待機)」の設定がレスポンス速度を左右します。
<IfModule mpm_event_module>
# 同時接続数の上限(計算結果)
ServerLimit 50
MaxRequestWorkers 50
# 起動時に用意しておくプロセス数
StartServers 2
# 待機スレッド数(少なすぎると急なアクセス増で待たされ、多すぎるとメモリ無駄)
MinSpareThreads 25
MaxSpareThreads 50
# 1プロセスあたりのスレッド数(固定推奨)
ThreadsPerChild 25
# メモリリーク対策:1000回処理したらプロセスをリフレッシュ
MaxConnectionsPerChild 1000
</IfModule>
3. コンテンツ圧縮とKeepAliveの最適化
メモリ計算ができたら、次は通信の効率化です。
Brotli圧縮の有効化
従来のGzipよりも高圧縮なBrotliを使うことで、転送速度を向上させます。
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/html text/css application/javascript application/json
BrotliCompressionQuality 5
</IfModule>
KeepAliveTimeout の短縮
KeepAlive はONにすべきですが、デフォルトの5秒は長すぎます。
スマホでの閲覧が多い現代では、細切れの通信が多いため、接続維持は2〜3秒で十分です。
KeepAlive On KeepAliveTimeout 3
4. ベンチマークで効果測定 (Apache Bench)
設定を変えたら、必ず効果測定を行います。ab コマンドを使いましょう。
# -n 1000 (合計リクエスト数) -c 10 (同時接続数) ab -n 1000 -c 10 https://your-domain.com/
結果の中の Requests per second(1秒間にさばけた数)を見てください。
チューニング前より数値が上がっていれば成功です。
まとめ:科学的なアプローチで攻めろ
パフォーマンスチューニングに「魔法」はありません。あるのは「計算」と「計測」だけです。
- プロセスサイズを実測する。
- 物理メモリ内に収まるように上限を決める。
- ベンチマークで効果を確認する。
これを繰り返すことで、あなたのサーバーはスペック以上の性能を発揮し始めます。
計算通り「50」に設定したら、アクセスが増えても落ちなくなりました!
その分、KeepAliveや圧縮設定を見直したおかげで、体感速度はむしろ上がってます!
「無理をさせない」って重要なんですね。
理解できたようね。
リソース管理こそエンジニアの腕の見せ所よ。
さて最終回の次回は、ApacheをWebサイト用だけでなく、Node.jsやPythonアプリの司令塔として使う「リバースプロキシ」の極意を伝授するわ!
▼余裕のあるメモリが安定の鍵
チューニングで効率化しても、物理的なメモリ不足はどうにもなりません。アクセス増に合わせてスケールアップが容易な、プロ推奨のVPSはこちらです。


コメント