web-dev-qa-db-ja.com

Apache2 prefork MaxClients ServerLimitのチューニング

私は、Apache2をWebサーバーとして使用している128 GB RAMのマシンを持っています(このマシンにはデータベースサーバーがありません。データベースマシンは、最大2000接続を処理できる64 GB RAMマシンです)。監視ツールを使用して、現在44人のビジーワーカーと12人のアイドルワーカーがあることがわかりました。私のpreforkモジュールの最良の理論値は何ですか?

負荷の高い時間に空白のページがWebサイトをロードすることがあり、Apacheエラーログにこのエラーが表示されました。

[通知] child pid 13595 exit signal Segmentation fault(11)

この問題もどのように解決できますか?

My Apache2 Preforkモジュール構成:

StartServers          3
MinSpareServers       3
MaxSpareServers       5
ServerLimit           3200
MaxClients            3100
MaxRequestsPerChild   0

wwwマシンでは無料-h

合計:128 GBの空き容量:97 GB(Apache2が実行されている場合)共有0bバッファー1.9 Gキャッシュ23 G

Apache2およびその他のプログラムで使用されるRAM:

Private  +   Shared  =  RAM used    Program

 96.0 KiB +  61.0 KiB = 157.0 KiB   sh
176.0 KiB +  26.0 KiB = 202.0 KiB   atd
176.0 KiB +  35.5 KiB = 211.5 KiB   acpid
208.0 KiB +  19.5 KiB = 227.5 KiB   mdadm
204.0 KiB +  30.0 KiB = 234.0 KiB   init
248.0 KiB +  62.0 KiB = 310.0 KiB   sendmail
376.0 KiB +  36.0 KiB = 412.0 KiB   dbus-daemon
388.0 KiB + 285.5 KiB = 673.5 KiB   cron (2)
820.0 KiB +  42.0 KiB = 862.0 KiB   gam_server
920.0 KiB + 108.0 KiB =   1.0 MiB   ntpd
968.0 KiB + 243.0 KiB =   1.2 MiB   getty (6)
  1.3 MiB + 351.5 KiB =   1.6 MiB   udevd (3)
  1.5 MiB + 343.0 KiB =   1.8 MiB   sendmail-msp
  2.0 MiB + 910.0 KiB =   2.9 MiB   plugin-localresources2
  3.4 MiB +  50.0 KiB =   3.4 MiB   rsyslogd
  3.6 MiB +  68.5 KiB =   3.7 MiB   bash
  1.9 MiB +   2.1 MiB =   4.0 MiB   sendmail-mta (4)
  3.8 MiB + 556.0 KiB =   4.3 MiB   sshd (2)
  3.7 MiB +   1.2 MiB =   4.8 MiB   plugin-Apache2
  5.1 MiB +   1.2 MiB =   6.3 MiB   agent-service
  7.0 MiB + 654.0 KiB =   7.6 MiB   fail2ban-server
  9.6 MiB +   2.6 MiB =  12.2 MiB   proftpd (8)
 59.2 MiB +  70.0 KiB =  59.3 MiB   miniserv.pl
 96.8 MiB +   3.6 MiB = 100.4 MiB   php5-cgi (2)
196.4 MiB +  35.9 MiB = 232.3 MiB   Apache2 (40)
---------------------------------
                     tot 450.0 MiB
22
User-N

Apacheパフォーマンスチューニングガイドライン によるApache prefork設定

見積もり:

The single biggest hardware issue affecting webserver performance is RAM.
A webserver should never ever have to swap, as swapping increases the latency
of each request beyond a point that users consider "fast enough". 
This causes users to hit stop and reload, further increasing the load.
You can, and should, control the MaxClients setting so that your server does
not spawn so many children it starts swapping. This procedure for doing this
is simple: determine the size of your average Apache process, by looking at
your process list via a tool such as top, and divide this into your total 
available memory, leaving some room for other processes.

次の入力に基づいて、このように設定する必要があります。

  • 総メモリ:128 GB
  • Apacheを除くすべてのメモリが-10%:115 GB
  • 次に、単一のApacheプロセスが使用している量を把握する必要があります。

これを計算するには、次のスクリプトを使用できます。

pgrep Apache2 | xargs -n1 -I{} cat /proc/{}/smaps | \
  awk '{if ($0 ~ /stack/) {pids+=1} else if ($0 ~/^Shared_/) 
    {shared+=$2} else if ($0 ~ /^Pss:/) {priv+=$2}} END {
      printf "%.2f MB\n",(priv+shared/(pids*pids))/1024}'

これは、アクティブなApacheプロセスの数ごとの共有使用量を比例的に分割し、 Pss (比例設定サイズ)

最後に、この数値で115 GBを分割すると、MaxClients/ServerLimit。ここから、次のような他の数値を比較的計算できます

  • StartServers MaxClientsの30%
  • MinSpareServers MaxClientsの5%
  • MaxSpareServers MaxClientsの10%
  • ServerLimit == MaxClients
  • MaxConnectionsPerChild 10000(メモリリークのあるアプリで起こりうる問題に対処するための控えめな代替手段として)
64
Hrvoje Špoljar