Apache использует слишком много памяти моего сервера, что приводит к его сбою. У меня на сервере 4 ГБ ОЗУ.
Я пытаюсь точно настроить параметры Apache, чтобы улучшить его производительность, но я новичок в этом.
Я пытался следовать совет этой статьи но я не знаю, как рассчитывать, и, кажется, делаю еще хуже.
Мой топ гласит:
11697 apache 15 0 322m 37m 4048 S 0.0 0.9 0:00.52 httpd
13602 apache 15 0 323m 37m 3944 S 0.0 0.9 0:00.50 httpd
11786 apache 15 0 322m 36m 4052 S 0.0 0.9 0:00.50 httpd
12525 apache 15 0 322m 36m 4040 S 0.0 0.9 0:00.63 httpd
11806 apache 15 0 322m 36m 3952 S 0.0 0.9 0:00.42 httpd
11731 apache 15 0 322m 36m 4036 S 0.0 0.9 0:00.46 httpd
11717 apache 16 0 322m 36m 3956 S 0.0 0.9 0:00.54 httpd
11659 apache 15 0 322m 36m 3980 S 0.0 0.9 0:00.49 httpd
Итак, было бы
MaxClients = 3000/ (322-37) = 10
Это правильно? Кроме того, какими должны быть значения для других параметров, таких как MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild?
Кто-нибудь может мне помочь?
Обновить
Я пробовал то, что вы предложили. Это работает, но ненадолго. Через некоторое время после запуска сервера использование памяти продолжает расти и никогда не снижается.
Я имею в виду, что после запуска сервера предположим, что в сети будет 500 пользователей. Сервер будет потреблять X RAM. Через 2 часа после этого, когда в сети будут те же 500 пользователей, сервер будет потреблять ОЗУ в 10 раз.
Есть ли способ избежать этого, или мне придется постоянно следить за сервером и время от времени перезагружать его?
Основным параметром для настройки использования памяти 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 "плохая":
Хотя я не знаю подробностей вашего сервера, приложения или трафика, я могу предложить следующие значения конфигурации в качестве отправной точки. Попробуйте их, отслеживайте загрузку и использование сервера и при необходимости измените настройки.