У меня есть сервер Intel (R) Xeon (R) CPU X3440 с 8 ГБ оперативной памяти.
Из того, что я вижу, что Apache использует всю оперативную память и делает сервер невосприимчивым.
Вот моя конфигурация Apache:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 1000
MaxClients 1000
MaxRequestsPerChild 4000
</IfModule>
И это мой бесплатный -m:
total used free shared buffers cached
Mem: 7859 7725 134 0 189 1566
-/+ buffers/cache: 5969 1889
Swap: 4095 61 4034
И это мой ТОП:
top - 10:19:57 up 23 min, 1 user, load average: 8.08, 6.50, 3.90
Tasks: 1124 total, 1 running, 1123 sleeping, 0 stopped, 0 zombie
Cpu(s): 9.8%us, 3.2%sy, 0.1%ni, 60.0%id, 26.2%wa, 0.0%hi, 0.6%si, 0.0%st
Mem: 8048096k total, 7924168k used, 123928k free, 207920k buffers
Swap: 4194300k total, 79820k used, 4114480k free, 1460356k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1921 mysql 20 0 1653m 39m 3428 S 62.7 0.5 6:26.24 mysqld
7944 apache 20 0 399m 29m 4236 S 6.6 0.4 0:10.13 httpd
3201 apache 20 0 382m 11m 3880 S 2.3 0.1 0:00.50 httpd
8030 apache 20 0 382m 10m 3872 S 2.0 0.1 0:00.39 httpd
2837 apache 20 0 384m 13m 3916 S 1.3 0.2 0:00.37 httpd
3160 apache 20 0 383m 11m 3908 S 1.3 0.2 0:00.55 httpd
10555 apache 20 0 382m 11m 3884 S 1.3 0.1 0:00.48 httpd
13626 apache 20 0 381m 10m 3828 S 1.3 0.1 0:00.05 httpd
13668 apache 20 0 382m 11m 3760 S 1.3 0.1 0:00.16 httpd
14284 apache 20 0 381m 10m 3712 S 1.3 0.1 0:00.06 httpd
2848 apache 20 0 382m 11m 3876 S 1.0 0.2 0:00.49 httpd
5254 apache 20 0 382m 11m 3852 S 1.0 0.1 0:00.25 httpd
6085 apache 20 0 382m 10m 3768 S 1.0 0.1 0:00.26 httpd
6257 apache 20 0 382m 11m 3876 S 1.0 0.1 0:00.50 httpd
8067 apache 20 0 380m 9.8m 3732 S 1.0 0.1 0:00.18 httpd
14314 apache 20 0 382m 10m 3768 S 1.0 0.1 0:00.09 httpd
14328 apache 20 0 380m 9288 3800 S 1.0 0.1 0:00.16 httpd
Так что же рекомендует решить эту проблему?
Я только что ответил на аналогичный вопрос Проверьте эту ссылку. Вот что я предложил:
У меня была похожая проблема с экземпляром в EC2, и вот что я сделал и предложил:
Если вы используете prefork, убедитесь, что модуль загружен, введя эти две команды
httpd -l
а также sudo httpd -M
Если вы видите, что модуль prefork загружен в результатах любой из этих двух команд, то переходите к следующему шагу. В противном случае, убедитесь, что загрузили его в первую очередь, иначе вы изменили бы настройки даром.
Запустите эту команду, чтобы найти средний объем памяти, используемый каждым процессом httpd ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
Назовите это значение x
Перезагрузите сервер apache с помощью sudo service httpd restart
и запомните, сколько у вас свободной памяти. Я вычел лишнюю 200MB-500MB
подушка от этой свободной памяти, которая будет использоваться позже. Назовите это значение y
Разделите ценность свободной памяти y
за объем памяти, используемой на процесс x
и это будет значение MaxRequestWorkers = y/x
Что касается стоимости MaxConnectionsPerChild
затем вы можете настроить его, пока не получите правильную конфигурацию. Если вы сделаете его слишком большим, процесс будет продолжать использовать все больше и больше памяти, прежде чем его убьют. Если вы сделаете его слишком маленьким, процессы будут слишком быстро умирать, и это приведет к перегрузкам в вашей системе. Я обычно держу это где-то между 4000
а также 10000
,
Некоторые из этих шагов были взяты из принятого ответа по следующей ссылке: StackExchange: использование памяти httpd где одно решение также предложило отключить некоторые модули, если они вам не нужны.
Обязательно проверьте журналы доступа. Может быть, кто-то пытается атаковать ваш сайт!
Я бы посоветовал вам сначала выполнить шаги 1-5 и посмотреть, решит ли это вашу проблему!
Удачи!
Других решений пока нет …