В настоящее время на моем 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 с помощью следующей команды:
Прочитайте строку Mem: и посмотрите на свободную колонку. Считайте, что это объем ОЗУ, который вы можете выделить для Apache, хотя я обычно предпочитаю вычитать 2 ГБ на более мощном сервере (например,> 4 ГБ) или 1 ГБ на более легком сервере. Так что, если в колонке free указано, что у меня есть 13GB, я бы порекомендовал предоставить Apache 11GB. Это базовый уровень. Если мы иногда сталкиваемся с какой-либо проблемой базы данных в журналах (как, например, 3 раза в журналах в течение 3-дневного периода), что ей требуется больше памяти, то мы могли бы подумать, что у нас было только 10 ГБ для воспроизведения вместо 11 ГБ (в данном случае ). Если в журналах Apache мы обнаружим, что серверу нужно больше MaxRequestWorkers, то это отдельная проблема, которую я рассмотрю ниже.
Откройте как 10 вкладок браузера, подключитесь к некоторым из ваших более длинных или медленных страниц загрузки с вашего веб-сайта и обновите примерно 3-4 раза на каждой вкладке.
После этого быстро выполните следующую команду:
Запустите его как 5 раз быстро.
Посмотрите на значение «Средний размер процесса» и усредните это значение среди 5 раз, когда вы его выполняли.
Теперь выполните следующую математику и обязательно конвертируйте ГБ в МБ по мере необходимости, чтобы все числа были в значениях МБ. Таким образом, умножьте на 1024 раз или разделите на 1024, в зависимости от того, куда вам нужно идти.
MaxRequestWorkers = Baseline Free (с буферным пространством) / средний размер процесса
Например, у меня был сервер 14 ГБ, но когда Apache был остановлен, сервер показал, что он использует 1 ГБ ОЗУ в режиме ожидания. Затем я предоставляю еще 1 ГБ в некотором дополнительном буферном пространстве для ОС на тот случай, если она понадобится. Это означает, что у меня будет базовый уровень 12 ГБ. Теперь я должен преобразовать его из ГБ в МБ, и поэтому я умножаю 12 x 1024 и получаю 12288. 12288 МБ - это мое базовое значение Free. В моем случае я увидел, что средний размер процесса составляет 21 МБ. Итак, я беру 12288/21 и получаю приблизительно 585. Теперь, как правило, сисопы округляют это значение, и поэтому я получил 580.
Обратите внимание, что вы можете не видеть параметр ServerLimit там. Добавьте это. Этот параметр по умолчанию равен 256, если он отсутствует, но должен иметь то же значение, что и MaxRequestWorkers, иначе вы получите ошибку.
Другим критическим фактором в вашей конфигурации Apache является файл /etc/apache2/apache2.conf с переменной Timeout, который измеряется в секундах. Это время, которое вы можете отправлять или получать с сервера до истечения времени ожидания. Вы также должны помнить о загрузке или загрузке файлов, например, если у вас есть веб-сайт, на котором люди могут загружать или загружать, например, CSV-файлы или другие большие файлы. И вам нужно помнить о загруженном сервере баз данных и о том, где вам может потребоваться предоставить некоторое время до истечения времени ожидания страниц. Чем меньше значение переменной Timeout, тем более доступным веб-сервер будет получать новые подключения. Тем не менее, обратите внимание, что слишком низкое значение этого параметра может привести к хаосу в переменных сеанса PHP, но не в файлах cookie, основанных на сеансах браузера. Так, например, значение 300 (5 минут) может быть полезно для веб-сервера, который использует переменные сеанса PHP для рабочего процесса веб-приложения вместо файлов cookie сеанса браузера. Значение 45 может быть хорошим для веб-сервера, который обслуживает не что иное, как статические рекламные целевые страницы, но будет ужасным для сервера, который должен использовать переменные сеанса PHP в значительной степени. Поэтому отредактируйте параметр Timeout в этом файле до необходимой вам суммы. Это может занять некоторое тестирование со всеми вашими веб-страницами, чтобы увидеть, если значение слишком низкое. Однако, вероятно, это хорошая идея, не устанавливать значение выше 300, если вы не видите проблем при загрузке больших файлов или загрузок больших файлов. но было бы ужасно для сервера, который должен использовать переменные сеанса PHP в значительной степени. Поэтому отредактируйте параметр Timeout в этом файле до необходимой вам суммы. Это может занять некоторое тестирование со всеми вашими веб-страницами, чтобы увидеть, если значение слишком низкое. Однако, вероятно, это хорошая идея, не устанавливать значение выше 300, если вы не видите проблем при загрузке больших файлов или загрузок больших файлов. но было бы ужасно для сервера, который должен использовать переменные сеанса PHP в значительной степени. Поэтому отредактируйте параметр Timeout в этом файле до необходимой вам суммы. Это может занять некоторое тестирование со всеми вашими веб-страницами, чтобы увидеть, если значение слишком низкое. Однако, вероятно, это хорошая идея, не устанавливать значение выше 300, если вы не видите проблем при загрузке больших файлов или загрузок больших файлов.
Теперь перезапустите ваш веб-сервис Apache. Если вы сделали что-то не так, Apache, скорее всего, сообщит вам об этом, как только вы запустите его снова, и вы сможете исправить это.
... нажмите CTRL + C, чтобы выйти из этого, если хотите.
Ищите жалобу на необходимость MaxRequestWorkers (и недавно, так как вы перезапустили веб-сервер). Если вы видите это даже при оптимальной настройке MaxRequestWorkers, то вам, вероятно, потребуется больше огневой мощи для ваших веб-сайтов или веб-приложений. Рассмотрим эти варианты:
источник
sudo
должны отображаться как код, а не как обычный текст. Я следовал документации по форматированию, но все еще борюсь здесь.То, на что вы можете поднять MaxRequestWorkers, зависит от того, сколько оперативной памяти занимает каждый из ваших процессов httpd / apache. Если каждый из них занимает 50 МБ (просто выбирая случайное число), то каждые 20 рабочих запросов, которые вы используете одновременно (т.е. одновременные соединения), будут занимать 1 ГБ. Таким образом, в этом примере вы можете иметь максимум 8GB * 20 = 160 MaxRequestWorkers. Тем не менее, вы не можете использовать всю оперативную память для Apache, вам нужно зарезервировать часть для других вещей, работающих там. Кроме того, для обеспечения производительности может быть полезно оставить некоторую свободную оперативную память, поскольку ОС будет использовать ее для кэширования и повышения производительности (хотя может быть предпочтительнее не исчерпывать соединения, по сравнению с тем, что сервер работает слишком быстро, поскольку сайт будет работать медленно, пока браузеры пользователей ждут подключения, если они полностью израсходованы).
источник
free
команду, чтобы получить базовый уровень памяти. Затем увеличьте число запущенных процессов, увеличив MinSpareServers, перезапустите apache,free
снова запустите и выполните математические вычисления. Проверьте moreofless.co.uk/apache-memory-usage для более подробной информации и объяснения.