У меня есть машина с ОЗУ 128 ГБ, которая использует Apache2 в качестве веб-сервера (на этой машине нет сервера базы данных, машина базы данных - это машина с ОЗУ 64 ГБ, которая может обрабатывать максимум 2000 подключений). С помощью инструмента мониторинга я вижу, что на данный момент около 44 занятых рабочих и 12 простаивающих рабочих, каковы наилучшие теоретические значения для моего модуля prefork?
У меня были пустые страницы, иногда загружающие веб-сайты в часы высокой нагрузки, и в моем журнале ошибок apache была эта ошибка:
[примечание] дочерний pid 13595 сигнал выхода Ошибка сегментации (11)
как можно решить и эту проблему?
Конфигурация модуля My Apache2 Prefork:
StartServers 3
MinSpareServers 3
MaxSpareServers 5
ServerLimit 3200
MaxClients 3100
MaxRequestsPerChild 0
Бесплатно -h на машине www :
всего: 128 ГБ свободно: 97 ГБ (с запущенным apache2) общие буферы 0b 1,9 ГБ кэш 23 ГБ
ОЗУ используется Apache2 и другими программами:
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
цитата:
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 использует память, пытаясь пропорционально разделить общее использование на количество активных процессов apache и добавить его поверх Pss (пропорциональный размер набора)
Наконец, вы разделите 115 ГБ на эту цифру и получите MaxClients/ServerLimit
. Отсюда вы можете относительно вычислить другие цифры, например
StartServers
30% MaxClientsMinSpareServers
5% MaxClientsMaxSpareServers
10% MaxClientsServerLimit
== MaxClientsMaxConnectionsPerChild
10000 (как консервативная альтернатива для решения возможных проблем с приложениями с утечкой памяти)