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 пользователей в сети, сервер будет использовать 10X RAM.
Есть ли способ избежать этого, или мне придется постоянно наблюдать за сервером и перезапускать его время от времени?
источник
Ответы:
Основным параметром для настройки использования памяти Apache будет
MaxClients
. Слишком низкое значение, и у вас закончатся свободные слоты для обслуживания клиентских запросов. Слишком много, и вы израсходуете всю свою оперативную память и начнете использовать пространство подкачки, что снизит производительность (это может выглядеть как сбой сервера).Один из способов настройки
MaxClients
состоит в том, чтобы наблюдать за использованием памяти системы и при необходимости изменять настройки. Если сервер начинает менять местами, отредактируйте его. Если на сервере есть свободная память, поднимите ее.Вы также можете оценить максимальное значение, посмотрев на использование памяти Apache. Запустите
top
и нажмите,M
чтобы отсортировать процессы по памяти. Вы должны увидеть что-то вроде:Вычтите столбцы RES и SHR, чтобы получить приблизительное использование памяти для каждого экземпляра Apache. В этом случае это около 16 МБ. Если у меня есть 4 ГБ ОЗУ и я хочу, чтобы 3 ГБ было использовано для Apache, мой параметр MaxClients будет примерно таким:
Итак, в этом случае я мог бы начать со значения 150-200, но я бы наблюдал за использованием памяти, и если бы он когда-нибудь начал приближаться к использованию подкачки, я бы уменьшил MaxClients на 10-20%. Также обратите внимание, что значение 3 ГБ является просто случайным примером. На серверах, работающих только под Apache, я мог бы использовать почти все 4 ГБ. В других случаях мне может потребоваться только 1 или 2 ГБ для Apache, а оставшиеся - для других приложений, системы или кеша.
Редактировать: отвечая на дополнительные вопросы
Как правило, нет никаких магических значений MaxClients или других параметров конфигурации Apache, которые сделают ваш сервер внезапно в два раза быстрее. Некоторые серверы будут работать нормально, независимо от того, равен MaxClients 10 или 1000. Существует два основных случая, когда параметр MaxClients «плохой»:
Хотя я не знаю деталей вашего сервера, приложения или трафика, я могу предложить следующие значения конфигурации в качестве отправной точки. Попробуйте их, следите за загрузкой и использованием сервера и меняйте настройки по мере необходимости.
источник