Я столкнулся с проблемой и просто не могу понять, как ее решить; У меня есть обычный сервер Ubuntu 12.04 с apache 2.2, на котором работает веб-сайт. Время от времени сервер перегружается и перестает отвечать на запросы, выполнение простых команд требует времени, пока сервер не будет перезагружен или apache / mysql не будет перезапущен. (И сам сайт закрывается полностью)
Заглянув в журнал ошибок, я вижу простой
[error] server reached MaxClients setting, consider raising the MaxClients setting
За этим следует куча mysqli, которая не может подключиться
Можно просто предположить, что мне нужно увеличить MaxClients, но я уже делал это пару раз, и я беспокоюсь, что сам перегрузу сервер, установив его слишком высоко, ниже показано, как в настоящее время установлен предварительный форк mpm:
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 10
MaxSpareServers 20
MaxClients 150
MaxRequestsPerChild 90
</IfModule>
В обычный день у нас примерно 1700 пользователей / посетителей (В течение 24 часов).
Детали сервера:
Несколько фотографий, которые я получил с помощью взглядов, здесь вы можете увидеть, как apache тихо поглощает много CPU, прежде чем они снова упадут: (Это только с несколькими пользователями на веб-сервере (от 5 до 20))
Как мне избежать сбоев / перегрузки моего сервера? (Я открыт для любого решения, даже переходя на nginx или что-то еще, если это может лучше справиться с нагрузкой).
Кроме того, меня не беспокоит использование / потребление ОЗУ, поскольку я могу добавить намного больше ОЗУ, меня беспокоит процессор.
Ниже приведена ссылка на отличную статью, которая поможет определить правильные настройки для модуля mpm_prefork_module.
Идея состоит в том, чтобы запустить сценарий, который покажет вам, сколько памяти потребляется каждым процессом Apache, а затем использовать эту информацию для настройки параметров.
http://cloudinservice.com/tune-apache-performance-using-mpm-prefork-module/
Сценарий: http://cloudinservice.com/wp-content/uploads/2011/03/ap.sh.zip
MaxClients и ServerLimit.
разархивировать ap.sh.zip
ш ап.ш
Результат будет примерно таким:
Использование памяти Apache (МБ): 1372,6 Средний размер процесса (МБ): 54,9041
Попробуйте выполнить это несколько раз, чтобы сравнить числа; хорошие результаты будут показаны при большой нагрузке на сервер. Теперь, когда вы знаете средний объем памяти, потребляемой Apache, и общий объем памяти вашего сервера, можно рассчитать значение, которое будет использоваться для настройки MaxClients.
Например, если в среднем один процесс Apache потребляет 50 МБ ОЗУ, а ОЗУ сервера - 2 ГБ, а для остальных процессов вы хотите оставить 512 МБ, то: MaxClients = (2 ГБ - 512 МБ) / 50 МБ = 30,72 ~ 30.
Насколько я понимаю, ServerLimit - это то же самое, но хотя параметр MaxClient может быть изменен на ходу без необходимости перезапуска Apache, для вступления в силу нового значения ServerLimit требуется перезапуск Apache.
MaxClients всегда должно быть <= ServerLimit. Чтобы упростить задачу, я установил ServerLimit = MaxClients, рассчитанный по приведенной выше формуле.