Как оптимизировать предварительное ветвление mpm для интенсивного трафика?

Я выделил 5 ГБ памяти для процессов Apache.

При базировании на том, что каждый процесс Apache использует в средних 42.5 МБ, я установил следование моего сервера (при вычислении, как будто каждый процесс использует 50 МБ памяти):

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          100
    MaxRequestsPerChild   0
</IfModule>

Теперь для вопросов:

  1. Как я могу определить сколько StartServers установить?
  2. Не будучи способен устанавливать Worker mpm (PHP и т.д.), делает выравнивание нагрузки, мой наилучший вариант для интенсивного трафика?
  3. Как я могу уменьшить память процесса Apache? мой CDN использования веб-сайта для обслуживания активов пользователю, в то время как сервер в конечном счете служат HTML только.

Я прочитал ответы здесь и искал много в Google для этого вопросы и ничто не мог найти достаточно конкретным.

1
задан 24 July 2014 в 15:13
1 ответ

Остерегайтесь: большинство apache-процессов делит большую часть своей памяти с родителями/собственниками. Вы не можете легко просуммировать значения из выделенной памяти процессов apache. Лучшее, что вы можете сделать: вы запускаете много процессов apache и проверяете, как это изменяет выделенную память.

1: StartServers имеет только ограниченное значение. Это значит, сколько дочерних процессов будет запущено изначально. Min/MaxSpareServers гораздо важнее.

2: Я не могу понять, Вы ничего не сказали о Вашем решении по балансировке нагрузки. Если вы хотите иметь возможность обрабатывать большой трафик, то лучше всего использовать рабочий apache (или даже другой тип http-сервера) для обслуживания статических файлов, а для динамических языков (вероятно, для php) - преборк (я предлагаю mpm-itk). Работник должен пересылать динамические запросы на сервер, основанный на prefork. Эта структура также может быть легко расширена до балансируемого по нагрузке кластерного решения.

3: MayRequestPerChild==0 означает, что процессы никогда не будут перезапускаться. Таким образом, если с ними возникнут проблемы, они никогда не будут исправлены, или если они протекают, это тоже не будет решено. Может быть нормально, если Ваша система стабильна, и Вы используете только идеально собранные языки на стороне сервера (php не один из них!), но я думаю, по практическим соображениям лучше использовать большое целое значение (в большинстве случаев я использую 100 или 500). Остерегайтесь: простой перезапуск дочернего процесса не так уж и дорого по сравнению с обработкой 100-500 запросов.

.
1
ответ дан 4 December 2019 в 00:21

Теги

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