512MサーバメモリでWordPressサイトを1つ立ち上げてみるとアクセスもないのに、ロードアベレージが高騰したのでAIさんが出した数値でチューニングしてみる
【AIによる回答】
apache メモリ 512m event チューニング3 hours ago
メモリ512MBの環境でApacheのevent MPMをチューニングするには、プロセスごとのメモリ使用量を把握し、それに基づいて同時接続数などのパラメータを調整することが重要です。
1. 現在のメモリ使用量の確認まず、Apacheの各プロセスがどれくらいのメモリを使用しているかを把握します。以下のコマンドで平均プロセスサイズ(MB)を確認できます。bashps -ylC apache2 | awk '{x += $8;y += 1} END {print "Average Process Size (MB): "x/((y-1)*1024)}'コードは注意してご使用ください。(apache2の部分は環境に合わせてhttpdなどに変更してください。)2. チューニングパラメータの計算総メモリ512MBのうち、OSや他のプロセス用にいくらかの空き(例: 64MB〜128MB程度)を確保する必要があります。ここでは仮に400MBをApacheに使用できるメモリとします。使用可能なメモリ総量 / 平均プロセスサイズ = 設定可能な最大プロセス/スレッド数例えば、平均プロセスサイズが10MBだった場合、400MB / 10MB = 40となります。3.mpm_event_moduleの設定/etc/apache2/mods-available/mpm_event.conf(または類似のパス) 内、<IfModule mpm_event_module>タグ内に以下の設定を記述します。設定値は上記の計算結果や、サーバーのコア数などを考慮して調整してください。apache<IfModule mpm_event_module> ServerLimit # MaxRequestWorkersを増やす場合に必要。計算結果を基に適切な値を設定。 StartServers # 起動時に作成される初期プロセス数。 MinSpareThreads # アイドル状態の最小スレッド数。 MaxSpareThreads # アイドル状態の最大スレッド数。 ThreadsPerChild # 各子プロセスが持つスレッド数。CPUコア数に合わせるのが一般的。 MaxRequestWorkers # 同時接続の最大数。メモリに合わせて最も重要な設定。 MaxConnectionsPerChild # 各子プロセスが処理するリクエストの最大数。メモリリーク対策になる。 </IfModule>コードは注意してご使用ください。推奨設定例 (メモリ400MB、平均プロセスサイズ10MB、CPU 1コアの場合):apache<IfModule mpm_event_module> ServerLimit 10 # MaxRequestWorkers / ThreadsPerChild + α 程度 StartServers 1 MinSpareThreads 25 MaxSpareThreads 50 ThreadsPerChild 25 # CPUコア数などに応じて調整 MaxRequestWorkers 40 # 400MB / 10MB = 40 に基づく MaxConnectionsPerChild 4000 # 適度な値 (例: 4000) </IfModule>コードは注意してご使用ください。
ServerLimit:MaxRequestWorkersをThreadsPerChildで割った値(切り上げ)以上に設定する必要があります。MaxRequestWorkers: メモリ消費を抑えるため、計算した値を目安に設定します。この値を超えた接続はキューに入れられます。MaxConnectionsPerChild: プロセスを定期的に再起動することで、メモリリークのリスクを減らします。4. その他の考慮事項
- PHPの実行環境:
mod_phpを使用している場合、PHPインタープリターが各Apacheプロセスに組み込まれるため、プロセスごとのメモリ使用量が大幅に増加します。メモリが限られている場合は、PHP-FPMと連携させる構成を強く推奨します。- Keep-Alive: Keep-Alive接続はリソースを長時間専有する可能性があるため、低メモリ環境では
KeepAliveTimeoutを短く設定するか、無効にすることも検討できます。- 監視: 設定変更後は、
mod_statusなどでサーバーの状態やメモリ使用量を継続的に監視し、必要に応じて設定値を微調整してください。
今の設定値がどこに書いてあるのか見つけられていないが、以下のように変更して、Apacheを再起動
vi /etc/httpd/conf.modules.d/00-mpm.conf
現在event稼働だったので、最後の <IfModule~ を追加
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines. See the httpd.conf(5) man
# page for more information on changing the MPM.
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so
<IfModule mpm_event_module>
ServerLimit 10
StartServers 1
MinSpareThreads 25
MaxSpareThreads 50
ThreadsPerChild 25
MaxRequestWorkers 40
MaxConnectionsPerChild 4000
</IfModule>
swapの使用量がちょっと減った?これで様子を見てみる
