Apache httpd, используя всю память, пока сервер не работает

У меня есть сервер 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

Так что же рекомендует решить эту проблему?

1

Решение

Я только что ответил на аналогичный вопрос Проверьте эту ссылку. Вот что я предложил:

У меня была похожая проблема с экземпляром в EC2, и вот что я сделал и предложил:

  1. Если вы используете prefork, убедитесь, что модуль загружен, введя эти две команды
    httpd -l а также sudo httpd -M
    Если вы видите, что модуль prefork загружен в результатах любой из этих двух команд, то переходите к следующему шагу. В противном случае, убедитесь, что загрузили его в первую очередь, иначе вы изменили бы настройки даром.

  2. Запустите эту команду, чтобы найти средний объем памяти, используемый каждым процессом httpd ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}' Назовите это значение x

  3. Перезагрузите сервер apache с помощью sudo service httpd restart и запомните, сколько у вас свободной памяти. Я вычел лишнюю 200MB-500MB подушка от этой свободной памяти, которая будет использоваться позже. Назовите это значение y

  4. Разделите ценность свободной памяти y за объем памяти, используемой на процесс x и это будет значение MaxRequestWorkers = y/x

  5. Что касается стоимости MaxConnectionsPerChild затем вы можете настроить его, пока не получите правильную конфигурацию. Если вы сделаете его слишком большим, процесс будет продолжать использовать все больше и больше памяти, прежде чем его убьют. Если вы сделаете его слишком маленьким, процессы будут слишком быстро умирать, и это приведет к перегрузкам в вашей системе. Я обычно держу это где-то между 4000 а также 10000,

  6. Некоторые из этих шагов были взяты из принятого ответа по следующей ссылке: StackExchange: использование памяти httpd где одно решение также предложило отключить некоторые модули, если они вам не нужны.

  7. Обязательно проверьте журналы доступа. Может быть, кто-то пытается атаковать ваш сайт!

Я бы посоветовал вам сначала выполнить шаги 1-5 и посмотреть, решит ли это вашу проблему!

Удачи!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]