この WordPress は Apache を使用しており、サーバーのメモリは 512MB です。最近、WordPress にいくつかのプラグインを追加したせいか、Apache のプロセスがメモリを食い潰し、頻繁に SWAP が発生するようになりました。
調べてみると、今回のケースに効果がありそうな Apache のチューティング方法を見つけることができたので、試してみました。設定ファイルは /etc/httpd/conf/httpd.conf
です。
変更前は以下の通りです。
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
変更後は以下の通りです。設定値のバランスは難しいですが、適当に減らしてみました。
<IfModule prefork.c>
StartServers 2
MinSpareServers 2
MaxSpareServers 4
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 50
</IfModule>
以下は各設定項目の説明です。
- StartServers: Apache が起動する際に同時に起動する子プロセスの数を指定します。これによって、Apache が負荷を処理するために最初に必要なリソースが確保されます。
- MinSpareServers: Apache が常に起動しておくべき最低限の空きプロセスの数を指定します。これによって、負荷が急増した場合でも Apache が追加のリクエストを処理できるようになります。
- MaxSpareServers: Apache が常に起動しておくことが許可される最大の空きプロセスの数を指定します。これによって、過剰なプロセスが起動しすぎてサーバーのリソースを無駄に消費するのを防ぎます。
- ServerLimit: サーバーが同時に処理できる最大のリクエスト数を指定します。これは Apache の設定の上限であり、この数以上のリクエストが来た場合は新しいリクエストは拒否されます。
- MaxClients: Apacheが同時に処理できる最大のクライアント接続数を指定します。これは、同時接続されるユーザーの数を制限します。
- MaxRequestsPerChild: 1 つの子プロセスが処理する最大リクエスト数を指定します。この数に達すると、Apache はその子プロセスを終了し、新しいプロセスを起動します。これによって、メモリリークやプロセスの不安定化を防ぎます。
Apache を再起動して有効化します。
[root@centos-5 ~]# service httpd restart
結果として、多少良くなった気がしますが、そもそもメモリの増強を検討した方が良さそうです。
CentOS 5 Apache メモリが不足している場合のチューニング
感謝noun感謝”]]],”en感謝thanksthanks感謝ありがとうございます