Признайте, что Ubuntu 14.04 использует Apache 2 с PHP, работающим через модуль mpm_prefork , редактируемый файл которого находится в /etc/apache2/mods-enabled/mpm_prefork.conf. Также следует учитывать , что начиная с Apache 2.4 MaxClients теперь переименовывается в MaxRequestWorkers , и поэтому любую документацию, касающуюся MaxClients, необходимо переключить на MaxRequestWorkers.
Временно остановите веб-сервис Apache с помощью следующей команды:
остановка службы sudo apache2
- Подождите 5 секунд, а затем выполните следующую команду, чтобы узнать, сколько виртуальной памяти у вас на свободном сервере:
sudo free -ht
Прочитайте строку Mem: и посмотрите на свободную колонку. Считайте, что это объем ОЗУ, который вы можете выделить для Apache, хотя я обычно предпочитаю вычитать 2 ГБ на более мощном сервере (например,> 4 ГБ) или 1 ГБ на более легком сервере. Так что, если в колонке free указано, что у меня есть 13GB, я бы порекомендовал предоставить Apache 11GB. Это базовый уровень. Если мы иногда сталкиваемся с какой-либо проблемой базы данных в журналах (как, например, 3 раза в журналах в течение 3-дневного периода), что ей требуется больше памяти, то мы могли бы подумать, что у нас было только 10 ГБ для воспроизведения вместо 11 ГБ (в данном случае ). Если в журналах Apache мы обнаружим, что серверу нужно больше MaxRequestWorkers, то это отдельная проблема, которую я рассмотрю ниже.
- Запустите веб-сервер Apache.
sudo service apache2 start
Откройте как 10 вкладок браузера, подключитесь к некоторым из ваших более длинных или медленных страниц загрузки с вашего веб-сайта и обновите примерно 3-4 раза на каждой вкладке.
После этого быстро выполните следующую команду:
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.
- Отредактируйте файл /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, иначе вы получите ошибку.
Другим критическим фактором в вашей конфигурации 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, скорее всего, сообщит вам об этом, как только вы запустите его снова, и вы сможете исправить это.
перезапуск службы sudo apache2
- Теперь повторите трюк с 10 вкладками браузера, который вы делали ранее, и посмотрите, не встречаетесь ли вы с ошибками конфигурации Apache в журнале ошибок веб-сервера Apache:
хвост sudo -f /var/log/apache2/error.log
... нажмите CTRL + C, чтобы выйти из этого, если хотите.
Ищите жалобу на необходимость MaxRequestWorkers (и недавно, так как вы перезапустили веб-сервер). Если вы видите это даже при оптимальной настройке MaxRequestWorkers, то вам, вероятно, потребуется больше огневой мощи для ваших веб-сайтов или веб-приложений. Рассмотрим эти варианты:
- Использование CDN для загрузки больших файлов, изображений и сценариев.
- Использование сервиса кэширования, такого как CloudFlare или других.
- Изменение стратегии вашего веб-сайта или веб-приложения для использования нескольких веб-серверов, действующих как одно «веб-приложение» за балансировщиком нагрузки.
- Добавление большего объема оперативной памяти на сервер и, таким образом, повторение этих вычислений.
- Теперь, когда сервер Apache настроен, он в некотором роде настроен. Вам нужно будет проверить это в течение 2-3 недель и найти проблемы MaxRequestWorker в журналах ошибок Apache. Исходя из этого, вы можете принять решение об оптимизации (см. Шаг 10). Вы также можете установить Munin с apt в Ubuntu и посмотреть на производительность Apache с течением времени и наметить идею роста, прежде чем решить, что вам нужно что-то делать с объемом трафика, который обрабатывает веб-сервер.