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

Как лучше всего настроить количество воркеров в Apache?

Мой сайт получает большой трафик в течение 2 часов в течение дня (2000 посещений в минуту). В остальное время трафика меньше (500e просмотров в минуту). Я экспериментировал со значениями MaxClients и MaxSpareServers, но у меня все еще есть время простоя в часы просмотра.

Как я могу рассчитать лучшие значения для моей конфигурации на основе имеющегося у меня объема оперативной памяти?

Каждый процесс занимает 36-40 Мб памяти.

             total       used       free     shared    buffers     cached
Mem:          3096        793       2302          0          0          0
-/+ buffers/cache:        793       2302
Swap:  

      0          0          0

Ценности, которые я использую сейчас

<IfModule prefork.c>
StartServers 10
MinSpareServers 22
MaxSpareServers 60
ServerLimit 90
MaxClients 90
MaxRequestsPerChild  400

ОБНОВЛЕНИЕ: я нашел это у своего хостинг-провайдера.

http://kb.mediatemple.net/questions/246/(dv)+HOWTO:+Basic+Apache+performance+tuning+(httpd)

У меня есть экстремальный пакет, и я использовал 190 в MaxClients вместо 200, я пробовал его пол ночи, и я получил несколько сообщений командной строки об ошибках malloc, но с помощью команды free и получил около 800 M в столбце free.

Если ваш сервер страдает от пиков, это может быть связано с тем, что apache очень медленно обрабатывает процесс и создание потоков (в режиме mpm_prefork это 1 новый подпроцесс в секунду). Если вы знаете, что вам нужен «высокий трафик» (скажем, это процесс 200), скажите apache, чтобы всегда Эти 200 процессов готовы, даже если они ничего не делают 90% времени. Вы будете готовы, когда люди войдут.

Посмотрите эту удобную презентацию (старая, но классная) http://www.techpresentations.org/Hacking_Apache_HTTP_Server_at_Yahoo!

Нет необходимости в StartServers, MaxSpareServers, MinSpareServers - только MaxClients (постоянный размер пула)

Ответ во многом зависит от типа контента, который вы обслуживаете. Это динамический или статический контент? Это широкий спектр контента или один документ?

Ты можешь использовать memcached для хранения документов в памяти, что позволит значительно масштабировать ее (устраняя узкое место на диске), но все зависит от того, сколько у вас оперативной памяти и сильно ли изменяется содержимое.

Необходимо проверить в зависимости от оборудования вашего сервера (особенно памяти) и эффективности сайта, на котором вы работаете. Что происходит, когда у вас простои? Вы достигли установленных вами ограничений? У вас заканчивается память?

Вы также можете посмотреть StartServers и ServerLimit.

ServerLimit устанавливает максимальное количество серверов, эффективно ограничивая MaxClients.

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

Все это, как говорится, действительно зависит от вашего контента. Если это большой сценарий CGI или что-то в этом роде, то apache должен с этим справиться. Возможно, вы захотите посмотреть на настройку вашего компьютера (для справки, мы использовали Burningman.com с несколькими десятками подсайтов (доски объявлений, галереи изображений и т. оперативной памяти и достигают только программных ограничений.

Если вы находитесь в ситуации с жестким ограничением памяти (VPS), вам может потребоваться уменьшить максимальное количество клиентов по умолчанию, чтобы предотвратить смерть подкачки.

Если нет, не трогай это.

Настройка детей apache - это одна из тех вещей, как пользовательская компиляция ядра, при которой люди в подавляющем большинстве причиняют больше вреда, чем пользы, даже если вред просто тратит полдня без всякой пользы. Оказывается, ребята из проекта httpd в apache довольно хорошо разбираются в своем деле! Я имею в виду, кто это подумал?

Весь трафик для динамического контента? Рассматривали ли вы использование nginx перед apache для обслуживания всего статического контента? Это освободило бы всех рабочих apache для работы только с динамическим контекстом.

Я согласен с тем, что сказал cagenut. Не трогай его.

Вы также можете рассмотреть возможность использования http-прокси, такого как Varnish или Squid. Но опять же, для этого вам тоже понадобится немного оперативной памяти.

Если вы можете провести сравнительный анализ. Используйте вашу осаду, она даст вам приблизительное представление о том, с чем может справиться ваш сервер. Во-вторых, Apache интенсивно использует процессор. Даже если бы у вас были гигабайты оперативной памяти и слабый процессор, он не масштабировался.

Уловка оптимизации заключается в использовании обратного прокси-сервера для работы с apache. nginx - это легкий веб-сервер, который очень хорошо работает как обратный прокси.

Вы должны обеспечить память для ОС, если вы израсходуете всю доступную память, система зависнет. Обычно статический контент будет использовать 2/5 МБ, а динамический 20/25 МБ, у вас 36/40 МБ

Итак, давайте посчитаем:

Общий объем памяти (в МБ) / Общий объем памяти на процесс = MaxClients.

Предположим, вы собираетесь зарезервировать 512 МБ для ОС, у вас есть 2584 МБ для других целей, таких как apache.

2584 МБ / 36 МБ = 71,7
2584 МБ / 40 МБ = 64,4

ServerLimit ограничивает MaxClients, используйте то же значение, но не используйте произвольные числа.
Используйте двоичные числа или попробуйте приблизиться к ним, исходя из ваших результатов. Пример:

StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 64
MaxClients 64
MaxRequestsPerChild 1024

Также сделайте настройку apache:

KeepAlive On
MaxKeepAliveRequests 64.
KeepAliveTimeout 2

У меня есть 1 сервер с аналогичной конфигурацией, с 3 миллионами посещений в месяц.

Вы также можете попробовать использовать, например, Nginx для статических файлов, а затем потребуется меньше процессов Apache с их большим объемом памяти для оставшихся запросов.