Предварительное ветвление MPM, слишком много процессов apache2?

Все эти серверы, идентичные в HW & SW. У них есть тот же набор СЕРВИСОВ (в автоматическом режиме)

Попытайтесь отключить сервис IIS и освободить папку временного файла / - когда Ваш сервер отстанет.

Я уверен, что эти 3 сервера являются сбалансированной загрузкой, и другие 2 ударят - совместно использовать загрузку.

6
задан 8 March 2017 в 20:00
5 ответов

Я дал Вам ответ на это в комментариях о Сервере, не отвечающем на SSH и HTTP, но работы ping, но по-видимому Вы не верите мне. Действительно, это верно!

Необходимо измерить MaxClients / ServerLimit к Вашей системе. "5-10 настроек для Серверов Минуты/Макса", которые Вы упоминаете, в основном не важны — это - просто количество дополнительных серверов, бродящих вокруг не выполнение чего-либо, что сохранит Apache.

Для установки MaxClients соответственно, посмотрите на типичную высшую точку для Вашего httpd (или apache2) процессы, и затем делят Вашу доступную память на это. Лучше всего к выпадающему немного для предоставления остальной части системной комнаты для дыхания. Так как у Вас есть 4 ГБ RAM и процессы 185 МБ, который означает Ваш ServerLimit значение должно быть 21 самое большее — вероятно, 20 или 19.

Теперь, может случиться так, что 190 МБ нетипичны. Можно установить ServerLimit выше, на основе другой оценки типичного использования, но затем Вы в основном держите пари, что у Вас никогда не будет скачка. Если это действительно произойдет, то Ваша система будет вне памяти.

Если можно найти способ ограничить использование памяти на рабочего, это собирается быть победой. Я держу пари, что это - случай PHP, Съел Мою RAM. Можно ли кодировать приложение для проживания в более низком memory_limit? Если Вы не можете сделать этого, Вам нужна другая модель, под которой можно выполнить Ваш PHP. Если Вы не можете сделать этого, необходимо купить больше RAM.

12
ответ дан 2 December 2019 в 23:58

Предварительное ветвление Apache MPM самоуправляет серверами. Это будет всегда запускаться с StartServers демоны, и никогда не будут выполнять меньше, чем MinSpareServers после того как это начинается. Это также в конечном счете удалится/уничтожит от серверов сверх MaxSpareServers если они неактивны достаточно долго (я не вспоминаю то, что "Достаточно долго" находится в этом контексте, ни если/как он может быть изменен).

ServerLimit определяет максимальный номер апачских демонов, которые могут работать в любой момент времени - Поэтому в Вашей ситуации у Вас могут быть сотни апачских процессов сна (они были порождены для обслуживания лавинной рассылки запросов и не были неактивны достаточно долго, чтобы быть уничтоженными родительским процессом все же).


Лично я думаю, что 1250 является довольно высоким значением для ServerLimit/MaxClients - 250 может быть более разумное число (хотя это может привести к случайным 503/серверам Занятым ошибкам, если Вы получаете крупную лавинную рассылку запросов: если это становится хронической проблемой, можно увеличить число или добавить больше серверов для обработки загрузки).

Связь этого вопроса предыдущему одно Ре: катастрофический отказ из памяти, определенно следуйте за руководством от Руководства Apache по этому параметру:

Most important is that MaxClients be big enough to handle as many simultaneous
requests as you expect to receive, but small enough to assure that there is enough
physical RAM for all processes.

… и моя персональная аксиома: It's better to give a client a 503 page than knock the server down. :)

8
ответ дан 2 December 2019 в 23:58

Выключите Сообщения проверки активности и установите MaxClients на 150. Наиболее вероятная причина у Вас есть 260 процессов, просто находящихся, состоит в том, потому что Apache покорно содержит соединения браузера, открытые, потому что KeepAlive на установлен в Вас апачский файл конфигурации.

2
ответ дан 2 December 2019 в 23:58

Вычислите, сколько серверов вы можете запустить в пределах ограничений оперативной памяти вашей системы, выполнив эту команду:

$ ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'

Если получится вывод типа:

Apache Memory Usage (MB): 1608.76
Average Process Size (MB): 55.4745

Теперь остановите apache и узнайте, сколько оперативной памяти у вас есть без него, используя free:

               total       used       free     shared    buffers     cached
  Mem:       7629384    7415780     213604          0     333428    5341884
  -/+ buffers/cache:    1740468    5888916
  Swap:      7629380       7968    7621412

(выше - в килобайтах). free -m покажет вам мегабайты.)

Linux заполнит доступную память буферами и кэшем, так что добавление free+buffers+cache (213604+333428+5341884) даст 5888916 Кбайт доступной памяти.

588916K доступно / 55474K на один apache-процесс = 106 серверов. Но установите его ниже, чтобы оставить немного места для дыхания.

.
1
ответ дан 2 December 2019 в 23:58

По моему опыту стоит попытаться настроить KeepAliveTimeout после правильной настройки других параметров относительно количества процессов. Я говорю настройка, что означает, что вы должны слегка изменить параметр и измерить реакцию сервера. Среди наших сайтов один лучше всего работает с KeepAliveTimeout=3, а другой с KeepAliveTimeout=1. Ни один из них не устраивает, если KeepAliveTimeout=3 выключен. Эта дополнительная настройка избавляет вас от необходимости покупать/распределять лишнюю оперативную память слишком рано.

Настройка проста, так как изменение вступает в силу сразу после плавного перезапуска:

sudo apache2ctl -k graful

(Я возрождаю старый поток, потому что Google всё ещё считает это актуальным... ;) )

1
ответ дан 2 December 2019 в 23:58

Теги

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