Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

Amazon Linux 2003 512MサーバメモリのApacheのチューニング

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

512MサーバメモリでWordPressサイトを1つ立ち上げてみるとアクセスもないのに、ロードアベレージが高騰したのでAIさんが出した数値でチューニングしてみる

【AIによる回答】

apache メモリ 512m event チューニング

3 hours ago

メモリ512MBの環境で

Apacheのevent MPMをチューニングするには、プロセスごとのメモリ使用量を把握し、それに基づいて同時接続数などのパラメータを調整することが重要です 

1. 現在のメモリ使用量の確認
まず、Apacheの各プロセスがどれくらいのメモリを使用しているかを把握します。以下のコマンドで平均プロセスサイズ(MB)を確認できます。 
bash
ps -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>
コードは注意してご使用ください。

  • ServerLimitMaxRequestWorkersThreadsPerChildで割った値(切り上げ)以上に設定する必要があります。
  • 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の使用量がちょっと減った?これで様子を見てみる

 

 

 

タイトルとURLをコピーしました