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

Как настроить Apache на сервере Ubuntu 14.04

В настоящее время на моем 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 и ничего больше. Вот почему этот вопрос отличается от этот вопрос.

  1. Помните, что Ubuntu 14.04 использует Apache 2 с PHP, работающим через mpm_prefork модуль, редактируемый файл которого находится в /etc/apache2/mods-enabled/mpm_prefork.conf. Также помните, что начиная с Apache 2.4, MaxClients теперь переименован в MaxRequestWorkers, поэтому любую документацию, касающуюся MaxClients, необходимо перенести на MaxRequestWorkers.

  2. Остановите веб-службу Apache временно с помощью следующей команды:

    sudo service apache2 stop
  1. Подождите 5 секунд, а затем выполните следующую команду, чтобы узнать, сколько виртуальной памяти у вас на сервере свободно:
    sudo free -ht

Прочтите строку Mem: и посмотрите на свободный столбец. Считайте это объемом ОЗУ, который вы можете выделить для Apache, хотя я обычно предпочитаю вычесть 2 ГБ на более мощном сервере (например,> 4 ГБ) или 1 ГБ на более легком сервере. Итак, если в столбце "Бесплатные" указано, что у меня 13 ГБ свободного места, я бы рекомендовал предоставить Apache 11 ГБ. Это базовый уровень. Если мы время от времени сталкиваемся с какой-либо проблемой базы данных в журналах (например, 3 раза в журналах за 3-дневный период), что требуется больше памяти, тогда мы можем считать, что у нас было только 10 ГБ для игры вместо 11 ГБ (в данном случае ). Если мы обнаружим в журналах Apache, что серверу требуется больше MaxRequestWorkers, то это отдельная проблема, о которой я расскажу ниже.

  1. Запустите веб-сервер Apache.
    sudo service apache2 start
  1. Откройте около 10 вкладок браузера, подключитесь к некоторым из ваших более длинных или медленных страниц вашего сайта и обновите 3-4 раза на каждой вкладке.

  2. После этого быстро выполните следующую команду:

    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.

  1. Отредактируйте файл /etc/apache2/mods-enabled/mpm_prefork.conf и подумайте о том, чтобы установить для него следующие значения по умолчанию, заменив XXX на ваш расчет MaxRequestWorkers:
 
`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

Обратите внимание, что вы можете не увидеть здесь параметр ServerLimit. Добавьте это. По умолчанию этот параметр равен 256, если отсутствует, но должен иметь то же значение, что и MaxRequestWorkers, иначе вы получите сообщение об ошибке.

  1. Еще одним важным фактором в вашей конфигурации Apache является файл /etc/apache2/apache2.conf с переменной Timeout, который измеряется в секундах. Это время, в течение которого вы можете отправлять или получать с сервера до истечения времени ожидания. Вы также должны иметь в виду загрузку файла или загрузку файла, например, если у вас есть веб-сайт, на котором люди могут загружать или скачивать CSV или другие большие файлы, например. И вам нужно помнить о загруженном сервере базы данных и о том, что вам может потребоваться некоторое время до тайм-аута страниц. Чем меньше вы сделаете эту переменную Timeout, тем более доступным будет веб-сервер для получения новых подключений. Обратите внимание, однако, что установка слишком низкого значения может привести к разрушению переменных сеанса PHP, но не файлов cookie сеанса браузера. Так, например, значение 300 (5 минут) может быть подходящим для веб-сервера, который использует переменные сеанса PHP для рабочего процесса веб-приложения вместо файлов cookie сеанса браузера. Значение 45 может быть хорошим для веб-сервера, который обслуживает не более чем статические рекламные целевые страницы, но будет ужасным для сервера, которому необходимо много использовать переменные сеанса PHP. Итак, отредактируйте параметр Timeout в этом файле на нужную вам величину. Это может потребовать некоторого тестирования со всеми вашими веб-страницами, чтобы увидеть, не слишком ли низкое значение. Однако, вероятно, будет хорошей идеей не устанавливать его выше 300, если вы не видите проблем при загрузке больших файлов или загрузке больших файлов.

  2. Теперь перезапустите веб-службу Apache. Если вы сделали что-то не так, Apache, скорее всего, сообщит вам об этом, когда вы снова запустите его, и вы сможете исправить это.

    sudo service apache2 restart
  1. Теперь повторите трюк с 10 вкладками браузера, который вы делали ранее, и посмотрите, есть ли у вас ошибки конфигурации Apache в журнале ошибок веб-сервера Apache:
    sudo tail -f /var/log/apache2/error.log

... нажмите CTRL + C, чтобы выйти из этого, если хотите.

Ищите жалобу на то, что вам нужны MaxRequestWorkers (и недавно после перезапуска веб-сервера). Если вы видите это даже при оптимальной настройке MaxRequestWorkers, то вам, вероятно, требуется больше возможностей для ваших веб-сайтов или веб-приложений. Рассмотрим эти варианты:

  • Использование CDN для загрузки больших файлов, изображений и скриптов.
  • Использование службы кеширования, например CloudFlare или других.
  • Переделайте стратегию вашего веб-сайта или веб-приложения для использования нескольких веб-серверов, действующих как одно «веб-приложение» за балансировщиком нагрузки.
  • Добавление дополнительной оперативной памяти к серверу и повторное выполнение этого вычисления.

  1. Теперь, когда сервер Apache настроен, это своего рода базовая настройка. Вам нужно будет проверить это в течение 2-3 недель и искать проблемы MaxRequestWorker в журналах ошибок Apache. Исходя из этого, вы можете принять решение об оптимизации (см. Шаг 10). Вы также можете установить Munin с apt на Ubuntu и посмотреть на производительность Apache с течением времени и построить представление о ее росте, прежде чем вы решите, что вам нужно что-то делать с объемом трафика, который обрабатывает веб-сервер.

То, что вы можете поднять MaxRequestWorkers, зависит от того, сколько оперативной памяти занимает каждый из ваших процессов httpd / apache. Если каждый из них занимает 50 МБ (просто выбирая случайное число), то каждые 20 рабочих запросов, которые вы используете одновременно (т. Е. Одновременные соединения), будут занимать 1 ГБ. Таким образом, в этом примере у вас может быть не более 8 ГБ * 20 = 160 MaxRequestWorkers. Однако вы не можете использовать всю оперативную память для apache, вам нужно зарезервировать часть для других вещей, работающих там. Также оставление некоторой свободной оперативной памяти может быть полезно для производительности, поскольку ОС будет использовать ее для кэширования данных и повышения производительности (хотя может быть предпочтительнее не разряжать соединения по сравнению с быстрым сервером, поскольку сайт будет медленным, пока браузеры пользователей ждут, когда станет доступно соединение, если они полностью разрядятся).