Я использую Apache 2.4 с prefork.
Мои директивы MPM установлены следующим образом:
<IfModule mpm_prefork_module>
MinSpareServers 200
MaxSpareServers 400
StartServers 200
ServerLimit 1300
MaxClients 1300
MaxRequestWorkers 1300
MaxRequestsPerChild 10000
</IfModule>
Однако моя страница состояния сервера показывает:
Parent Server Config. Generation: 1
Parent Server MPM Generation: 0
Server uptime: 34 minutes 54 seconds
Total accesses: 551221 - Total Traffic: 11.8 GB
CPU Usage: u8151.55 s2320.18 cu.02 cs.11 - 500% CPU load
263 requests/sec - 5.8 MB/second - 22.5 kB/request
1024 requests currently being processed, 0 idle workers
WKWKKWWWWKWKKKWKKCRWWKWWKKWKKWKWKWKWWWWWKKKWKWWKKWKKWWWWWKWWKWWK
WWWWKWKWWWWWKWKKWKWKWCKWKKKKKWKKWWKKCKKKKWWWKKWKKWWWKKWCKKWKKKKW
WWKKWKKWWWKWKWWKKKWKKWWWKKWWKKKWWKKKKWKKWKCKKWKKWKKKKWWWKWKKWKWW
WWKWWKWWKKWKWKKWKRWKWKKWWWWWWKCKKKKKWWWKWWWKKKKWWKWWKWWKKKKWWKKK
WKKKWWWWWWWKWKWKWWKKWKKKKKKWKWWKWWWKKKKWKKKWWKKWWKKWKWKWWWWKKWKW
KWKWWWWKCWKKKCWKKWWWWWKWKWWKWKWRWKKWWKWKWKKWWKKWKWKWKKKKWWKKKWKW
WKKKKKWKKKKWWKWKWKWWWKKKWWKWCCKWKWWKKWKKWWCKKWWWWKKWKWWWWWWWWKKK
WWKKKWKWKKKKKKKKWKKKKKKKWWWCKWWWKKWWWWKWCWWKKKKWKWWKKKWKWKWWWWWW
WKWKKKWKWKKWWWWKWWWWWKKCWKWWKWKWWWWWWKWWWWKKWWWKWWWWKWKWKKKWKKWK
WWKKKWKWWWKKWWWKWKWKWKKKKWKWWWWWWWKKWWWWKKKCKKKWKWKWWWWKWKWWWWWW
WWKKKWKWWWKWWKWWKKWKWKWKWKKWKKWKKKCKKWWWKWCWKKWWKKWWKKWKKWWKKWWK
WWKKWKWKKWKWKWKWWKWKKWWKKWWKKKWKWWKKWWWKKWWKKCKKKWWKKWKWWWCWKKWK
KKWKWKWWWWWKKKKKKKWKWKWKWWWWKKKWWKWKWKKKWKWWWKWCWWKWKWWKKKWWWCWK
WCWCKWWKKWKWWKWKKWWWKKWWKRKWWKKWWWKWKWWKWKKWWWKKWWKWKWKWWWKWKWKW
WKWKWWKWKKKWWWKWWWKCWWWWKWWWKKKKKKWKWKKKKKKKKWKKWWWWWWWWWKWWWKKW
KWKKKWWKKWWKWKWWKKWWKKKKKWKWWWKKWKWWKWWWKKKWKWCKKKKWWKWWKWCKKCKK
SSSSSSSSSSSSSSSSSSSSSSSSS.......................................
................................................................
................................................................
................................................................
....................
Обратите внимание на строку, в которой говорится, что в настоящее время обрабатывается 1024 запроса с 0 бездействующими рабочими. Он просто привязан к 1024 запросам.
Теперь наверху моего /etc/init.d/httpd у меня есть ulimit -HSn 32768 поэтому я не думаю, что это проблема с ограничением открытых файлов.
Я действительно не могу понять, почему соединения обрываются на 1024, хотя мои MaxClients установлены выше, а статус сервера, похоже, требует больше соединений, но останавливается на 1024.
Согласно Документы Apache 2.4 ServerLimit:
Существует жесткое ограничение ServerLimit 20000, скомпилированного на сервере (для prefork MPM 200000).
Таким образом, вы не должны достигать жесткого предела.
У меня были проблемы с настройкой ServerLimit
в более ранних версиях; пытаться apache2ctl stop
а потом apache2ctl start
. (Использование изящного и даже перезапуска не помогло принять изменение.)
На заметку: вы можете уменьшить свой KeepAliveTimeout
и / или MaxKeepAliveRequests
, или попробуйте KeepAlive Off
поскольку у вас так много рабочих в штате «К». Кроме того, эти 'S' указывают на то, что у сервера проблемы с запуском рабочих процессов, вероятно, из-за 500% загрузки ЦП (которая, как я полагаю, является максимальной доступной). Если настройка параметров KeepAlive не помогает, вам может потребоваться рассмотрите возможность обновления сервера или балансировки нагрузки.
Вам следует исследовать HA Proxy (если вы еще этого не сделали), чтобы разделить ваши запросы на несколько серверов.
Даже на быстром оборудовании вы перекачиваете много данных с одной машины. Если вам нужно сохранить одну машину, попробуйте Nginx. Он будет кружить вокруг Apache при высокой нагрузке.