web-dev-qa-db-ja.com

LinuxサーバーでApacheプリフォークmpm値を調整する方法

現在、Apache/2.4.23バージョンを使用しており、ELBの背後にあるWebサーバーで複数の仮想ホストサイトを実行しています。 ELBの下に4つのインスタンスがあり、それぞれに合計8GBのRAMがあります。これらのWebサーバーでは、httpd.confファイルにmpmディレクティブが設定されていませんが、httpd-mpm.confファイル(/usr/share/doc/httpd24-2.4)にmpmモジュールディレクティブのデフォルト値が表示されています。 .23)。私のウェブサーバーはpreforkmpmモジュールを使用しています

httpd -V | grep MPM
Server MPM:     prefork

現在、4つのWebサーバーすべてに8GBから約200MBの空き領域しか残っておらず、常に約60のhttpdプロセスが実行されていることがわかります。以下はメトリックです

[root@ip ~]# ps -ef | grep httpd | wc -l
58

[root@ip ~]# ps -ylC httpd | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Proccess Size (MB): "x/((y-1)*1024)}'
Apache Memory Usage (MB): 1640.18
Average Proccess Size (MB): 38.1438

[root@ip ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          7986       7755        231         51        114        233
-/+ buffers/cache:       7407        579
Swap:            0          0          0

サーバーのパフォーマンスを向上させるために、httpd.confファイルを以下のpreforkmpmディレクティブで更新することを計画しています。変更したいのは、MaxRequestWorkersの値を250から400に変更することだけです。

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

編集:以下はhttpd-mpm.confファイルのデフォルト設定です。しかし、httpd.confファイルにprefork mpmモジュールの設定が表示されないため、Webサーバーがデフォルト値を下回っていると想定しています。

<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>

以下はトップ出力です:

top - 13:26:31 up 21:08,  1 user,  load average: 0.27, 0.17, 0.12
Tasks: 201 total,   1 running, 199 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.7%us,  0.3%sy,  0.0%ni, 98.3%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8178632k total,  7985364k used,   193268k free,   113336k buffers
Swap:        0k total,        0k used,        0k free,   189448k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
26918 Apache    20   0  764m  53m  39m S  0.0  0.7   0:01.65 httpd
24963 Apache    20   0  769m  50m  36m S  0.3  0.6   0:01.39 httpd
26026 Apache    20   0  769m  49m  34m S  0.0  0.6   0:00.81 httpd
26116 Apache    20   0  769m  47m  32m S  0.0  0.6   0:01.06 httpd
25766 Apache    20   0  769m  47m  32m S  0.0  0.6   0:00.95 httpd
27620 Apache    20   0  769m  47m  32m S  0.0  0.6   0:00.47 httpd
26548 Apache    20   0  769m  47m  32m S  0.0  0.6   0:00.66 httpd
27128 Apache    20   0  769m  46m  32m S  0.0  0.6   0:01.16 httpd
28247 Apache    20   0  769m  46m  31m S  0.0  0.6   0:00.24 httpd
27670 Apache    20   0  769m  46m  31m S  0.0  0.6   0:00.32 httpd
27424 Apache    20   0  769m  46m  31m S  0.0  0.6   0:00.41 httpd
24378 Apache    20   0  763m  46m  33m S  0.0  0.6   0:01.28 httpd
26800 Apache    20   0  763m  45m  32m S  0.0  0.6   0:00.75 httpd
27672 Apache    20   0  763m  45m  31m S  0.0  0.6   0:00.53 httpd
26614 Apache    20   0  762m  45m  33m S  0.0  0.6   0:00.88 httpd
25098 Apache    20   0  762m  44m  32m S  0.0  0.6   0:01.20 httpd
26671 Apache    20   0  763m  44m  31m S  0.0  0.6   0:00.64 httpd
27635 Apache    20   0  763m  44m  31m S  0.0  0.6   0:00.61 httpd
23499 Apache    20   0  763m  43m  29m S  0.0  0.5   0:01.77 httpd
26285 Apache    20   0  767m  43m  29m S  0.3  0.5   0:00.70 httpd
27868 Apache    20   0  761m  42m  31m S  0.3  0.5   0:00.70 httpd
26444 Apache    20   0  763m  42m  29m S  0.0  0.5   0:00.73 httpd
26081 Apache    20   0  763m  42m  29m S  0.0  0.5   0:00.68 httpd
25467 Apache    20   0  763m  42m  29m S  0.0  0.5   0:00.99 httpd
26412 Apache    20   0  763m  42m  28m S  0.0  0.5   0:00.53 httpd
27412 Apache    20   0  763m  42m  29m S  0.0  0.5   0:00.45 httpd
26720 Apache    20   0  763m  42m  29m S  0.0  0.5   0:00.51 httpd
26179 Apache    20   0  763m  42m  29m S  0.0  0.5   0:00.59 httpd
25943 Apache    20   0  763m  42m  29m S  0.0  0.5   0:00.78 httpd
27570 Apache    20   0  763m  42m  28m S  0.0  0.5   0:00.28 httpd
26721 Apache    20   0  763m  42m  28m S  0.0  0.5   0:00.46 httpd
27252 Apache    20   0  763m  42m  28m S  0.0  0.5   0:00.54 httpd
27408 Apache    20   0  763m  42m  28m S  0.0  0.5   0:00.29 httpd
27612 Apache    20   0  763m  42m  28m S  0.0  0.5   0:00.36 httpd
27576 Apache    20   0  763m  42m  28m S  0.0  0.5   0:00.28 httpd
27668 Apache    20   0  883m  41m  28m S  0.0  0.5   0:00.31 httpd
27626 Apache    20   0  763m  41m  28m S  0.0  0.5   0:00.32 httpd

私の質問は、この変更により、Webサーバーが使用するシステムメモリが少なくなり、負荷を効率的に処理できるようになるかどうかです。 そして、私のWebサーバーの空き容量が少ないため、MaxRequestWorkersの値を250から400に変更すると、さらに問題が発生します?サーバーのメモリ消費を最適化するためのより良い解決策はありますか?

1
MichealMills

なぜあなたが労働者よりもプリフォークを選ぶのか分かりません。すでにApache/2.4.23を使用しているため。参照: ここでのこの回答はworkerの使用を推奨します 、また、メモリと並行性がはるかに効率的です。

労働者

mpm_workerはスレッド化を使用します-これは並行性の大きな助けになります。ワーカーはいくつかの子プロセスをスピンオフし、次に子プロセスをスピンオフします。プリフォークと同様に、一部のスペアスレッドは、着信接続を処理するために、可能であれば準備ができています。スレッド数は、プリフォークのサーバー数のようにメモリ使用量に直接関係しないため、このアプローチはRAMではるかに親切です。また、接続はpreforkのスペアサーバーではなく、空きスレッド(通常は利用可能)を待つだけでよいため、同時実行をはるかに簡単に処理できます。

PS。ポイントが足りないためコメントできませんでした。

1
Dextro67