Основным параметром для настройки использования памяти Apache будет MaxClients
. Слишком низкое значение, и у вас закончатся свободные слоты для обслуживания клиентских запросов. Слишком много, и вы израсходуете всю свою оперативную память и начнете использовать пространство подкачки, что снизит производительность (это может выглядеть как сбой сервера).
Один из способов настройки MaxClients
состоит в том, чтобы наблюдать за использованием памяти системы и при необходимости изменять настройки. Если сервер начинает менять местами, отредактируйте его. Если на сервере есть свободная память, поднимите ее.
Вы также можете оценить максимальное значение, посмотрев на использование памяти Apache. Запустите top
и нажмите, M
чтобы отсортировать процессы по памяти. Вы должны увидеть что-то вроде:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Вычтите столбцы RES и SHR, чтобы получить приблизительное использование памяти для каждого экземпляра Apache. В этом случае это около 16 МБ. Если у меня есть 4 ГБ ОЗУ и я хочу, чтобы 3 ГБ было использовано для Apache, мой параметр MaxClients будет примерно таким:
MaxClients = 3000/16 = 188
Итак, в этом случае я мог бы начать со значения 150-200, но я бы наблюдал за использованием памяти, и если бы он когда-нибудь начал приближаться к использованию подкачки, я бы уменьшил MaxClients на 10-20%. Также обратите внимание, что значение 3 ГБ является просто случайным примером. На серверах, работающих только под Apache, я мог бы использовать почти все 4 ГБ. В других случаях мне может потребоваться только 1 или 2 ГБ для Apache, а оставшиеся - для других приложений, системы или кеша.
Редактировать: отвечая на дополнительные вопросы
Как правило, нет никаких магических значений MaxClients или других параметров конфигурации Apache, которые сделают ваш сервер внезапно в два раза быстрее. Некоторые серверы будут работать нормально, независимо от того, равен MaxClients 10 или 1000. Существует два основных случая, когда параметр MaxClients «плохой»:
- Слишком низкий : когда MaxClients слишком низок, вы попадете в ситуацию, когда все клиенты Apache используются, и новые соединения попадают в очередь в ожидании, когда следующий клиент станет доступным. Если вы включите Apache mod_status, вы сможете в реальном времени увидеть, сколько клиентов занято в любой момент времени. Это состояние относительно легко диагностировать, так как сайт будет работать медленно во время большого трафика, и все клиенты могут быть замечены в использовании.
- Слишком высокий : когда MaxClients слишком высок, вы попадете в случае исчерпания всей оперативной памяти и начнете использовать своп. Когда это произойдет, производительность вашего сайта упадет практически до нуля (учитывайте разницу в скорости между ОЗУ и диском). Это состояние может быть гораздо сложнее наблюдать и диагностировать, так как сервер будет нормально работать с высокими значениями MaxClients, пока не будет наблюдаться всплеск трафика. Например, на сайте, который получает несколько обращений в час, я могу установить MaxClients равным 1000, что гораздо больше, чем поддерживается ОЗУ, но никогда не возникало проблем, поскольку Apache нужно было использовать только одного или двух клиентов одновременно. Я обнаружу проблему только тогда, когда получу всплеск трафика, увеличивая количество одновременно используемых клиентов, пока не исчерпается ОЗУ и не потребуется пространство подкачки.
Хотя я не знаю деталей вашего сервера, приложения или трафика, я могу предложить следующие значения конфигурации в качестве отправной точки. Попробуйте их, следите за загрузкой и использованием сервера и меняйте настройки по мере необходимости.
- mod_status : включите это, чтобы вы могли видеть использование Apache. Для более сложной статистики установите приложение для мониторинга, такое как Zabbix / Nagios, чтобы вы могли отслеживать использование сервера и схемы трафика.
- MaxClients : установите значение 100-200. Я бы начал с более низкого значения, если не уверен, и следил за использованием памяти / процессора / Apache. Это будет основным параметром для настройки.
- MaxRequestsPerChild : указывает, когда клиент / дочерний элемент Apache будет перезапущен. Нет неправильного значения (хотя очень маленькие значения могут быть неэффективными), и это будет зависеть от того, какой контент вы обслуживаете. Для динамического контента большое ненулевое значение (скажем, 1000) не позволит вашим процессам httpd в конечном итоге стать слишком большими.
- Другие параметры : хотя я не провел тщательный сравнительный анализ оставшихся параметров, они должны иметь относительно небольшой эффект, если вы не установите для них очень низкие или очень высокие значения. Использование значений по умолчанию должно быть хорошо для большинства сайтов. См. Документацию к модулю Apache Prefork или Worker для полного описания параметров, которые используются в каждом модуле (нет смысла настраивать параметр, который вы не используете).
- Сравнительный анализ: при настройке параметров я бы рекомендовал использовать инструмент сравнительного анализа, такой как ab (ApacheBench) или siege, чтобы получить количественную оценку возможностей вашего сервера. Полагаться на то, что вы чувствуете себя хуже или хуже, видеть, падает ли он или нет, не является хорошим способом настройки параметров веб-сервера.