В настоящее время на моем Apache 2 (точнее, Apache 2.4.7) на Ubuntu 14.04 у меня есть этот параметр:
/etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 100
MaxSpareServers 250
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
Сервер представляет собой сервер Amazon объемом 8 ГБ (ОЗУ), который не делает ничего, кроме загрузки трехстраничной формы регистрации для некоторых рекламных кампаний Google.
Я нашел сценарий под названием apachetuneit.sh в Интернете, но через некоторое время Apache сообщил об этой ошибке:
[Вт, 21 апреля, 16:45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: сервер достиг настройки MaxRequestWorkers, рассмотрите возможность увеличения настройки MaxRequestWorkers
Как я могу судить, как установить эти настройки?
Я спрашиваю только о том, как настроить Apache 2.4 и ничего больше. Вот почему этот вопрос отличается от этот вопрос.
Помните, что Ubuntu 14.04 использует Apache 2 с PHP, работающим через mpm_prefork модуль, редактируемый файл которого находится в /etc/apache2/mods-enabled/mpm_prefork.conf. Также помните, что начиная с Apache 2.4, MaxClients теперь переименован в MaxRequestWorkers, поэтому любую документацию, касающуюся MaxClients, необходимо перенести на MaxRequestWorkers.
Остановите веб-службу Apache временно с помощью следующей команды:
sudo service apache2 stop
sudo free -ht
Прочтите строку Mem: и посмотрите на свободный столбец. Считайте это объемом ОЗУ, который вы можете выделить для Apache, хотя я обычно предпочитаю вычесть 2 ГБ на более мощном сервере (например,> 4 ГБ) или 1 ГБ на более легком сервере. Итак, если в столбце "Бесплатные" указано, что у меня 13 ГБ свободного места, я бы рекомендовал предоставить Apache 11 ГБ. Это базовый уровень. Если мы время от времени сталкиваемся с какой-либо проблемой базы данных в журналах (например, 3 раза в журналах за 3-дневный период), что требуется больше памяти, тогда мы можем считать, что у нас было только 10 ГБ для игры вместо 11 ГБ (в данном случае ). Если мы обнаружим в журналах Apache, что серверу требуется больше MaxRequestWorkers, то это отдельная проблема, о которой я расскажу ниже.
sudo service apache2 start
Откройте около 10 вкладок браузера, подключитесь к некоторым из ваших более длинных или медленных страниц вашего сайта и обновите 3-4 раза на каждой вкладке.
После этого быстро выполните следующую команду:
sudo 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)}'
Быстро запустите его 5 раз.
Посмотрите на значение среднего размера процесса и усредните его среди 5 запусков.
Теперь выполните следующую математику и обязательно конвертируйте ГБ в МБ по мере необходимости, чтобы все числа были в значениях МБ. Итак, либо умножьте на 1024, либо разделите на 1024, в зависимости от того, в каком направлении вам нужно идти.
MaxRequestWorkers знак равно Базовый уровень Бесплатно (с буферным пространством) / Средний размер процесса
Например, у меня был сервер на 14 ГБ, но когда Apache был остановлен, сервер показал, что он использует 1 ГБ ОЗУ в режиме ожидания. Затем я предоставляю еще 1 ГБ дополнительного буферного пространства для ОС на случай, если это понадобится. Это означает, что у меня будет Baseline Free 12 ГБ. Теперь я должен преобразовать его из ГБ в МБ, поэтому я умножаю 12 x 1024 и получаю 12288. 12288 МБ - это мое базовое свободное значение. В моем случае я видел, что средний размер процесса был 21 МБ. Итак, я беру 12288/21 и получаю примерно 585. Обычно сисопы округляют это значение в меньшую сторону, поэтому я получил 580.
`<IfModule mpm_prefork_module>`
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers XXX
ServerLimit XXX
MaxConnectionsPerChild 0
</IfModule>
Обратите внимание, что вы можете не увидеть здесь параметр ServerLimit. Добавьте это. По умолчанию этот параметр равен 256, если отсутствует, но должен иметь то же значение, что и MaxRequestWorkers, иначе вы получите сообщение об ошибке.
Еще одним важным фактором в вашей конфигурации Apache является файл /etc/apache2/apache2.conf с переменной Timeout, который измеряется в секундах. Это время, в течение которого вы можете отправлять или получать с сервера до истечения времени ожидания. Вы также должны иметь в виду загрузку файла или загрузку файла, например, если у вас есть веб-сайт, на котором люди могут загружать или скачивать CSV или другие большие файлы, например. И вам нужно помнить о загруженном сервере базы данных и о том, что вам может потребоваться некоторое время до тайм-аута страниц. Чем меньше вы сделаете эту переменную Timeout, тем более доступным будет веб-сервер для получения новых подключений. Обратите внимание, однако, что установка слишком низкого значения может привести к разрушению переменных сеанса PHP, но не файлов cookie сеанса браузера. Так, например, значение 300 (5 минут) может быть подходящим для веб-сервера, который использует переменные сеанса PHP для рабочего процесса веб-приложения вместо файлов cookie сеанса браузера. Значение 45 может быть хорошим для веб-сервера, который обслуживает не более чем статические рекламные целевые страницы, но будет ужасным для сервера, которому необходимо много использовать переменные сеанса PHP. Итак, отредактируйте параметр Timeout в этом файле на нужную вам величину. Это может потребовать некоторого тестирования со всеми вашими веб-страницами, чтобы увидеть, не слишком ли низкое значение. Однако, вероятно, будет хорошей идеей не устанавливать его выше 300, если вы не видите проблем при загрузке больших файлов или загрузке больших файлов.
Теперь перезапустите веб-службу Apache. Если вы сделали что-то не так, Apache, скорее всего, сообщит вам об этом, когда вы снова запустите его, и вы сможете исправить это.
sudo service apache2 restart
sudo tail -f /var/log/apache2/error.log
... нажмите CTRL + C, чтобы выйти из этого, если хотите.
Ищите жалобу на то, что вам нужны MaxRequestWorkers (и недавно после перезапуска веб-сервера). Если вы видите это даже при оптимальной настройке MaxRequestWorkers, то вам, вероятно, требуется больше возможностей для ваших веб-сайтов или веб-приложений. Рассмотрим эти варианты:
То, что вы можете поднять MaxRequestWorkers, зависит от того, сколько оперативной памяти занимает каждый из ваших процессов httpd / apache. Если каждый из них занимает 50 МБ (просто выбирая случайное число), то каждые 20 рабочих запросов, которые вы используете одновременно (т. Е. Одновременные соединения), будут занимать 1 ГБ. Таким образом, в этом примере у вас может быть не более 8 ГБ * 20 = 160 MaxRequestWorkers. Однако вы не можете использовать всю оперативную память для apache, вам нужно зарезервировать часть для других вещей, работающих там. Также оставление некоторой свободной оперативной памяти может быть полезно для производительности, поскольку ОС будет использовать ее для кэширования данных и повышения производительности (хотя может быть предпочтительнее не разряжать соединения по сравнению с быстрым сервером, поскольку сайт будет медленным, пока браузеры пользователей ждут, когда станет доступно соединение, если они полностью разрядятся).