Я пытался исправить это, но, видимо, недостаточно знаю. Когда я запускаю команду top, я вижу, что она заполнена процессами httpd. Когда это происходит, мой сайт перестает загружаться. Он не падает, он просто крутится и крутится. Я использую префорк 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 МБ. Вот скриншот сверху, имейте в виду, что он показывает не все процессы 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
Что я делаю не так?
Мне кажется, у вас проблема с кодом, которую вы пытаетесь контролировать с помощью параметров 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 всегда неприятны: /