私は、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
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.
次の入力に基づいて、このように設定する必要があります。
これを計算するには、次のスクリプトを使用できます。
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
== MaxClientsMaxConnectionsPerChild
10000(メモリリークのあるアプリで起こりうる問題に対処するための控えめな代替手段として)