手当たり次第に書くんだ

飽きっぽいのは本能

CentOS 5 Apache メモリ不足時のチューニング – httpd プロセス数を見直す

CentOS 5 世代の Apache は、prefork MPM を前提に運用されていることが多く、アクセス数やモジュール構成によって httpd プロセスがメモリを大きく消費することがあります。

この記事では、CentOS 5 の Apache でメモリ不足が起きる場合に、httpd プロセス数を見直す観点を確認します。現在の新規構築ではなく、古い Apache サーバーを読むための内容です。

まずメモリ使用量を確認する

free -m
ps aux | grep httpd
ps -ylC httpd --sort:rss

Apache のメモリ不足では、1プロセスあたりの RSS と、同時に起動しているプロセス数を見ます。単にアクセスが多いだけでなく、PHP やモジュールの影響で1プロセスが重くなっている場合もあります。

prefork MPM の設定を見る

grep -n 'StartServers\|MinSpareServers\|MaxSpareServers\|MaxClients\|ServerLimit' /etc/httpd/conf/httpd.conf

設定例

メモリが少ない環境では、MaxClients を大きくしすぎると、同時接続を捌く前にメモリを使い切ります。

sudo cp -a /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak.$(date +%Y%m%d%H%M%S)

sudo tee -a /etc/httpd/conf/httpd.conf >/dev/null <<'EOF'
<IfModule prefork.c>
StartServers 2
MinSpareServers 2
MaxSpareServers 5
ServerLimit 30
MaxClients 30
MaxRequestsPerChild 1000
</IfModule>
EOF

この値は例です。実際には、1プロセスあたりのメモリ使用量と搭載メモリから逆算します。

設定を確認して反映する

sudo apachectl configtest
sudo service httpd restart
ps -ylC httpd --sort:rss

設定変更後は、構文確認、再起動、プロセス数、メモリ使用量を確認します。アクセスが増えた時に swap が増えていないかも見ます。

現在の視点での注意点

古い Apache / PHP 環境では、メモリ不足を MPM 設定だけで解決しようとしても限界があります。アプリケーション側のメモリ使用量、PHP モジュール、キャッシュ、リバースプロキシ化、サーバー移行も含めて考えるべきです。

1 プロセスあたりのメモリから逆算する

Apache のメモリ不足を考える時は、MaxClients だけを見ても不十分です。1 プロセスあたりの実メモリ使用量と、同時に立ち上がるプロセス数から、サーバー全体でどれくらいメモリを使うかを逆算します。

  • Apache 1 プロセスあたりの RSS を見る
  • 同時接続数と MaxClients を確認する
  • MySQL や他プロセスが使うメモリを差し引く
  • スワップが発生していないか確認する

古い CentOS 5 の Web サーバーでは、メモリが少ない環境で Apache、PHP、MySQL が同居していることがあります。その場合、Apache だけを増やすとサーバー全体がスワップして、かえって遅くなります。

ps -ylC httpd --sort:rss
ps aux | grep [h]ttpd
free -m
vmstat 1 5
top

Apache Status と合わせて見る

Apache Status が有効であれば、メモリ使用量だけでなく、リクエスト処理中なのか、KeepAlive で待機しているのかも確認できます。接続が多いのか、処理が重いのか、待機が多いのかで対処が変わります。

curl "http://127.0.0.1/server-status?auto"
grep -E "MaxClients|StartServers|KeepAlive|Timeout" /etc/httpd/conf/httpd.conf
tail -f /var/log/httpd/error_log

まとめ

CentOS 5 の Apache メモリ不足対策では、httpd プロセス数と1プロセスあたりのメモリ使用量を分けて確認します。MaxClients を増やせば性能が上がるわけではなく、メモリに収まる範囲で上限を決める必要があります。

関連する記事

参考書籍

参考書籍
参考書籍
ストーリーで覚えるLinux CLI入門

古い Linux サーバーの操作や設定ファイルを読む前提として、CLI の考え方を確認したい場合の参考書籍です。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

CentOS 5 Apache メモリ不足時のチューニング – httpd プロセス数を見直す

CentOS 5 Apache メモリ不足時のチューニング – httpd プロセス数を見直す」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る