Назад | Перейти на главную страницу

Как оптимизировать prefork 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 эти вопросы, но не смог найти ничего достаточно конкретного.

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

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

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

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