В настоящее время я использую версию Apache / 2.4.23, и я запускаю несколько сайтов виртуальных хостов на моем веб-сервере за ELB. У меня есть 4 экземпляра под моим ELB, каждый с 8 ГБ общей оперативной памяти. На этих веб-серверах я не вижу никаких директив mpm, установленных в моем файле httpd.conf, поскольку я мог видеть значения по умолчанию для директив модулей mpm в файле httpd-mpm.conf (в /usr/share/doc/httpd24-2.4 .23). Мой веб-сервер использует модуль mpm prefork
httpd -V | grep MPM
Server MPM: prefork
В настоящее время все 4 веб-сервера имеют только около 200 МБ свободного места из 8 ГБ, и я вижу, что всегда выполняется около 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, указав ниже директивы prefork mpm. Единственное, что я хотел бы изменить, это значение MaxRequestWorkers с 250 до 400.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
редактировать: Ниже приведены настройки по умолчанию в файле httpd-mpm.conf. Но я не вижу никаких настроек модулей prefork mpm в файле httpd.conf, тем самым предполагая, что мой веб-сервер использует значения по умолчанию ниже
<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
Мой вопрос: поможет ли это изменение моему веб-серверу использовать меньше системной памяти и будет ли он эффективно справляться с нагрузкой. И поскольку на моем веб-сервере меньше свободного места, изменение значения с 250 на 400 для MaxRequestWorkers вызовет дальнейшие проблемы.? Есть ли лучшее решение для оптимизации потребления памяти на моем сервере?
Я не уверен, почему вы предпочли бы предварительную вилку рабочему. Поскольку вы уже используете Apache / 2.4.23. Обратитесь: Этот ответ прямо здесь будет защищать использование рабочего, Кроме того, это намного эффективнее памяти и параллелизма.
Рабочий
mpm_worker использует потоки, что очень помогает при параллелизме. Worker запускает некоторые дочерние процессы, которые, в свою очередь, отключают дочерние потоки; Как и в случае с prefork, некоторые резервные потоки по возможности остаются готовыми для обслуживания входящих соединений. Этот подход намного удобнее для ОЗУ, поскольку количество потоков не имеет прямого отношения к использованию памяти, как количество серверов в prefork. Он также намного легче обрабатывает параллелизм, поскольку соединениям просто нужно дождаться свободного потока (который обычно доступен) вместо резервного сервера в prefork.
PS. Не смог прокомментировать это из-за недостаточного количества баллов.