Как настроить значения mpm prefork Apache на сервере Linux

В настоящее время я использую версию Apache / 2.4.23, и я запускаю несколько сайтов виртуальных хостов на моем веб-сервере за ELB. У меня есть 4 экземпляра под моим ELB, каждый с 8 ГБ общей оперативной памяти. На этих веб-серверах я не вижу никаких директив mpm, установленных в моем файле httpd.conf, поскольку я мог видеть значения по умолчанию для директив модулей mpm в файле httpd-mpm.conf (в /usr/share/doc/httpd24-2.4 .23). Мой веб-сервер использует модуль prefork mpm

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

Мой вопрос: поможет ли это изменение моему веб-серверу использовать меньше системы память и будет ли он эффективно справляться с нагрузкой. И поскольку на моем веб-сервере меньше свободного места, не вызовет ли изменение значения MaxRequestWorkers с 250 на 400 дополнительные проблемы ? Есть ли лучшее решение для оптимизации потребления памяти на моем сервере?

1
задан 7 July 2017 в 16:27
1 ответ

Я не уверен, почему вы предпочли бы предварительные вилки рабочим. Поскольку вы уже используете Apache / 2.4.23. Обратитесь к: Этот ответ прямо здесь будет защищать использование worker , а также эффективен в отношении памяти и параллелизма.

Worker

mpm_worker использует потоки, что очень помогает при параллелизме. Worker запускает некоторые дочерние процессы, которые, в свою очередь, отключают дочерние потоки; Как и в случае с prefork, некоторые резервные потоки по возможности остаются готовыми для обслуживания входящих соединений. Этот подход намного удобнее для ОЗУ, поскольку количество потоков не имеет прямого отношения к использованию памяти, как количество серверов в prefork. Он также намного легче справляется с параллелизмом, поскольку соединениям просто нужно дождаться свободного потока (который обычно доступен) вместо резервного сервера в prefork.

PS. Невозможно прокомментировать это из-за недостаточного количества баллов.

1
ответ дан 3 December 2019 в 23:28

Теги

Похожие вопросы