Я выделил 5 ГБ памяти для процессов Apache.
Основываясь на том факте, что каждый процесс Apache потребляет в среднем 42,5 МБ, я установил на своем сервере следующее (при расчетах, как если бы каждый процесс потреблял 50 МБ памяти):
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 100
MaxRequestsPerChild 0
</IfModule>
А теперь вопросы:
StartServers
установить?Worker mpm
(PHP и т. Д.), Является ли балансировка нагрузки моим лучшим вариантом для высокого трафика?Я читал здесь ответы и много искал в Google эти вопросы, но не смог найти ничего достаточно конкретного.
Осторожно: большинство процессов apache делят большую часть своей памяти со своими родителями / братьями и сестрами. Вы не можете легко суммировать значения выделенной памяти из процессов apache. Лучшее, что вы можете сделать: вы запускаете множество процессов apache и проверяете, как это изменяет вашу выделенную память.
1: StartServers имеет ограниченное значение. Это означает, сколько дочерних процессов будет запущено изначально. Min / MaxSpareServers гораздо важнее.
2: Я не могу понять, вы ничего не сказали о своем решении для балансировки нагрузки. Если вы хотите иметь возможность обрабатывать высокий трафик, лучшим вариантом было бы использовать рабочий apache (или даже другой тип http-сервера) для обслуживания статических файлов и предварительный форк (я предлагаю вам mpm-itk) для динамического языки (возможно, для php). Рабочий должен пересылать динамические запросы серверу на основе prefork. Эта структура также может быть легко расширена до кластерного решения с балансировкой нагрузки.
3: MayRequestPerChild == 0 означает, что процессы никогда не будут перезапущены. Таким образом, если с ними возникла проблема, она никогда не была устранена, или если они протекают, это также не будет решено. Это может быть нормально, если ваша система стабильна, и вы используете только идеальные языки со сборкой мусора на стороне сервера (php не один из них!), но я думаю, что из практических соображений лучше использовать большое целое число (в большинстве случаев я использую 100 или 500). Осторожно: простой перезапуск дочернего процесса не требует больших затрат по сравнению с обработкой 100-500 запросов.