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

18

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

ServerChecker
источник
@JennyD Эта статья слишком широка для этой конкретной потребности.
ServerChecker,
То, как вы оцениваете эти конкретные настройки, - это нагрузочное тестирование.
Дженни Д.
@JennyD Это даже проще, чем это. Просто используйте скрипт ap.sh при регулярной загрузке несколько раз в день и в среднем, выполните математические расчеты в соответствии с нижеприведенной ссылкой на cloudinservice и установите для MaxRequestWorkers это значение. Затем посмотрите журналы Apache на наличие проблем с MaxRequestWorkers и либо увеличьте, добавьте больше оперативной памяти, добавьте CloudFlare или добавьте другой веб-узел. Нет необходимости проводить чрезвычайно интенсивное нагрузочное тестирование.
ServerChecker,
Вы можете написать ответ, содержащий информацию об этом сценарии и соответствующие материалы по ссылкам, которые вы включили в свой ответ, на вопрос, который я указал в качестве возможного дубликата.
Дженни Д

Ответы:

45
  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 apache2
  1. Подождите 5 секунд, а затем выполните следующую команду, чтобы узнать, сколько виртуальной памяти у вас на свободном сервере:
    sudo free -ht

Прочитайте строку Mem: и посмотрите на свободную колонку. Считайте, что это объем ОЗУ, который вы можете выделить для Apache, хотя я обычно предпочитаю вычитать 2 ГБ на более мощном сервере (например,> 4 ГБ) или 1 ГБ на более легком сервере. Так что, если в колонке free указано, что у меня есть 13GB, я бы порекомендовал предоставить Apache 11GB. Это базовый уровень. Если мы иногда сталкиваемся с какой-либо проблемой базы данных в журналах (как, например, 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 (МБ):" x / 1024; напечатать "Средний размер процесса (МБ):" x / ((y-1) * 1024)} '

Запустите его как 5 раз быстро.

Посмотрите на значение «Средний размер процесса» и усредните это значение среди 5 раз, когда вы его выполняли.

Теперь выполните следующую математику и обязательно конвертируйте ГБ в МБ по мере необходимости, чтобы все числа были в значениях МБ. Таким образом, умножьте на 1024 раз или разделите на 1024, в зависимости от того, куда вам нужно идти.

MaxRequestWorkers = Baseline Free (с буферным пространством) / средний размер процесса

Например, у меня был сервер 14 ГБ, но когда Apache был остановлен, сервер показал, что он использует 1 ГБ ОЗУ в режиме ожидания. Затем я предоставляю еще 1 ГБ в некотором дополнительном буферном пространстве для ОС на тот случай, если она понадобится. Это означает, что у меня будет базовый уровень 12 ГБ. Теперь я должен преобразовать его из ГБ в МБ, и поэтому я умножаю 12 x 1024 и получаю 12288. 12288 МБ - это мое базовое значение Free. В моем случае я увидел, что средний размер процесса составляет 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, если вы не видите проблем при загрузке больших файлов или загрузок больших файлов. но было бы ужасно для сервера, который должен использовать переменные сеанса PHP в значительной степени. Поэтому отредактируйте параметр Timeout в этом файле до необходимой вам суммы. Это может занять некоторое тестирование со всеми вашими веб-страницами, чтобы увидеть, если значение слишком низкое. Однако, вероятно, это хорошая идея, не устанавливать значение выше 300, если вы не видите проблем при загрузке больших файлов или загрузок больших файлов. но было бы ужасно для сервера, который должен использовать переменные сеанса PHP в значительной степени. Поэтому отредактируйте параметр Timeout в этом файле до необходимой вам суммы. Это может занять некоторое тестирование со всеми вашими веб-страницами, чтобы увидеть, если значение слишком низкое. Однако, вероятно, это хорошая идея, не устанавливать значение выше 300, если вы не видите проблем при загрузке больших файлов или загрузок больших файлов.

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

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

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

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

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

  1. Теперь, когда сервер Apache настроен, он в некотором роде настроен. Вам нужно будет проверить это в течение 2-3 недель и найти проблемы MaxRequestWorker в журналах ошибок Apache. Исходя из этого, вы можете принять решение об оптимизации (см. Шаг 10). Вы также можете установить Munin с apt в Ubuntu и посмотреть на производительность Apache с течением времени и наметить идею роста, прежде чем решить, что вам нужно что-то делать с объемом трафика, который обрабатывает веб-сервер.
ServerChecker
источник
«Хотя эти ссылки могут дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится ».
Дженни Д.
@JennyD Хорошая мысль! Я это сделаю.
ServerChecker,
@ Модератор Мне нужна помощь в форматировании этого ответа. Шаг 7 должен был быть conf файл с отступами. Шаг 11 не должен был быть с отступом. Команды кода, начинающиеся с, sudoдолжны отображаться как код, а не как обычный текст. Я следовал документации по форматированию, но все еще борюсь здесь.
ServerChecker
1
Я сделал то, что мог - уценка на самом деле не очень хорошо справляется со смешанными списками и кодом, но я думаю, что мне все-таки удалось немного улучшить его.
Дженни Д
для новичков centos как я: ps -lyU apache вместо ps -ylC apache2
user1928596
3

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

g491
источник
Какой хороший способ профилировать это? Какие команды можно ввести, чтобы увидеть, сколько оперативной памяти каждый процесс apache использует под нагрузкой? Нам также нужно пространство оперативной памяти для MySQL (сайт WordPress) и обычных системных процессов.
ServerChecker
Посмотрите, сколько процессов запущено, и запустите freeкоманду, чтобы получить базовый уровень памяти. Затем увеличьте число запущенных процессов, увеличив MinSpareServers, перезапустите apache, freeснова запустите и выполните математические вычисления. Проверьте moreofless.co.uk/apache-memory-usage для более подробной информации и объяснения.
g491
Теперь я узнал, что есть супер быстрый способ сделать это. Это указано в ссылке на cloudinservice.com в моем ответе ниже. Команда ap.sh, что кто-то разобрался. Также я узнал, что MaxClients теперь переименован в MaxRequestWorkers в Apache 2.4+.
ServerChecker,