Apache имеет массу процессов, запущенных при взгляде сверху и заставляет сайт не загружаться
Я пытался это исправить, но, видимо, не знаю достаточно. Когда я запускаю команду top, я вижу, что она заполнена процессами httpd. Когда это происходит, мой сайт перестает загружаться. Он не падает, он просто вращается и вращается. Я использую prefork MPM. Это выглядит так:
<IfModule prefork.c>
StartServers 1
MinSpareServers 5
#MinSpareServers 1
MaxSpareServers 10
#MaxSpareServers 5
ServerLimit 25
#ServerLimit 50
MaxClients 25
#MaxClients 50
#MaxRequestsPerChild 10000
MaxRequestsPerChild 100
</IfModule>
Эта проблема началась с значений по умолчанию, которые закомментированы. Затем я попытался внести изменения, думая, что это поможет, если я уменьшу MaxClients, потому что у меня есть около 1 ГБ оперативной памяти. Я думал, что MaxClients по умолчанию был высоким, потому что среднее использование памяти на процесс httpd составляет 55 МБ. Вот скриншот top, имейте в виду, что это не показывает все процессы httpd.
top - 09:48:27 up 42 days, 3:13, 1 user, load average: 1.09, 1.09, 1.09
Tasks: 35 total, 3 running, 32 sleeping, 0 stopped, 0 zombie
Cpu(s): 14.7%us, 0.5%sy, 0.0%ni, 84.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2097152k total, 1134676k used, 962476k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1649 root 17 0 315m 122m 14m S 0.0 6.0 1:51.67 java
27755 mysql 18 0 204m 71m 5744 S 4.0 3.5 806:09.08 mysqld
23603 apache 15 0 76404 51m 5900 S 0.0 2.5 0:20.21 httpd
20408 apache 15 0 77124 51m 5252 S 0.0 2.5 0:25.57 httpd
28026 apache 16 0 76788 50m 5240 R 97.7 2.5 0:05.15 httpd
24497 apache 16 0 76272 50m 5484 S 0.0 2.5 0:06.55 httpd
27724 apache 15 0 76380 50m 5268 S 0.0 2.5 0:04.81 httpd
21561 apache 15 0 75672 50m 5532 S 0.0 2.4 0:28.54 httpd
26537 apache 16 0 75116 49m 5488 R 19.9 2.4 0:10.09 httpd
28027 apache 15 0 75080 49m 5216 S 0.0 2.4 0:03.07 httpd
24498 apache 15 0 74180 49m 5656 S 0.0 2.4 0:12.33 httpd
21934 apache 15 0 74568 48m 5256 S 0.0 2.4 0:27.48 httpd
24484 apache 15 0 74152 48m 5260 S 0.0 2.4 0:17.70 httpd
28012 apache 15 0 73248 47m 5208 S 0.0 2.3 0:02.34 httpd
13428 root 18 0 37032 15m 8456 S 0.0 0.8 0:00.21 httpd
Что я делаю неправильно?
1 ответ
Похоже, у вас есть проблема с кодом, которую вы пытаетесь контролировать с помощью параметров MPM.
Некоторые из этих параметров являются контрпроизводительными, в частности MaxClients и MaxRequestPerChild, они не помогут вам снизить нагрузку, а наоборот, увеличат ее.
Также помните, что top показывает распределение виртуальной памяти, ни в коем случае это не означает, что каждый apache действительно использует 50 МБ памяти, чтобы получить более точную статистику, вы можете активировать mod_status, добавив это в свою конфигурацию.
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
Просто чтобы дать вам пример, вот мой конфиг на обычном сервере Apache под большой нагрузкой
StartServers 32
MinSpareServers 10
MaxSpareServers 20
ServerLimit 8192
MaxClients 4096
MaxRequestsPerChild 9000
Больше всего меня беспокоит то, что один экземпляр httpd, работающий на 97% ЦП, показывает, что код, работающий на apache, делает что-то довольно неприятное, я бы предпочел разобраться с этим, потому что вы просто пытаетесь контролировать ситуацию (мудро), понижая ваши параметры prefork, но единственный способ решить эту проблему - решить основную проблему.
Удачи! Проблемы с кодом Apache - это всегда боль:/