Назад | Перейти на главную страницу

Apache запускает множество процессов, когда смотрит вверх, и заставляет сайт не загружаться

Я пытался исправить это, но, видимо, недостаточно знаю. Когда я запускаю команду 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 всегда неприятны: /