Вопрос или проблема
Используя AlmaLinux 9.5 с Virtualmin 7.30.4 и Apache2:
На моём сервере постоянно возникают проблемы из-за достижения предела MaxRequestWorkers.
Я обновил его до большего значения, чем по умолчанию, но, боюсь, он продолжает использовать 100, как видно из статуса httpd Idle/Busy workers 100/0:
Active: active (running) since Thu 2025-02-20 13:36:38 UTC; 13min ago
Docs: man:httpd.service(8)
Main PID: 379587 (httpd)
Status: "Total requests: 193; Idle/Busy workers 100/0;Requests/sec: 0.242; Bytes served/sec: 12KB/sec"
Я использую mpm_event_module (shared)
Мой файл /etc/httpd/conf.modules.d/00-mpn.conf содержит:
<IfModule mpm_event_module>
ServerLimit 16
StartServers 3
ThreadLimit 128
ThreadsPerChild 64
MinSpareThreads 75
MaxSpareThreads 250
MaxRequestWorkers 1024
MaxConnectionsPerChild 10000
</IfModule>
Я перезапустил службу httpd после внесения этого изменения.
Как я могу узнать текущее фактическое число MaxRequestWorkers, чтобы мои сайты на сервере не продолжали истекать временем ожидания.
Ответ или решение
Для того чтобы определить, каково реальное количество MaxRequestWorkers, используемых в данный момент на вашем сервере, необходимо выполнить несколько шагов. Прежде всего, важно понять, как Apache обрабатывает соединения и как настройки влияют на производительность сервера.
Теория
MaxRequestWorkers — это параметр конфигурации Apache, который определяет максимально допустимое количество одновременно обрабатываемых запросов. Этот параметр особенно важен для высоконагруженных веб-серверов, так как превышение этого лимита приведет к тому, что новые подключения будут либо отвергнуты, либо задержаны, что может привести к увеличению времени ожидания для пользователей.
Apache использует модуль mpm_event_module
, который управляет многопоточностью и оптимизирован для работы с многочисленными одновременными подключениями. В данном модуле параметры ServerLimit
, ThreadsPerChild
, и другие связаны с тем, сколько запросов одновременно может обрабатывать сервер.
Пример
Как следует из предоставленной конфигурации, у вас установлено:
ServerLimit 16
ThreadsPerChild 64
MaxRequestWorkers 1024
Это значит, что сервер может иметь до 16 процессов ("детей"), каждый из которых способен обрабатывать 64 запроса одновременно. Таким образом, в общей сложности, до 1024 запросов могут обрабатываться в любое время.
Однако, возможно, что сервер по какой-то причине не использует эти настройки корректно. Это может быть связано с проблемами при перезагрузке сервера или с тем, что конфигурация была изменена в другом месте, например, в дополнительных конфигурационных файлах.
Применение
Для того чтобы проверить, какое реальное количество MaxRequestWorkers сервер использует, выполните следующие действия:
-
Проверьте логи Apache:
- В первую очередь просмотрите файлы
/var/log/httpd/error_log
на предмет сообщений, касающихся достигаемого лимита MaxRequestWorkers или неудачных попыток создания дочерних процессов.
- В первую очередь просмотрите файлы
-
Проверьте активные конфигурации:
- Выполните команду
apachectl -t -D DUMP_MODULES
для проверки загруженных модулей и убедитесь, чтоmpm_event_module
действительно загружен как модуль MPM. - Проверьте весь каталог конфигурации Apache, а именно
/etc/httpd/conf
и все его подпапки, на наличие других файлов, где могут быть переопределены параметры MaxRequestWorkers.
- Выполните команду
-
Используйте утилиты мониторинга:
- Для проверки текущей загрузки и использования ресурсов сервера вы можете использовать такие утилиты, как
top
,htop
, или специализированные инструменты мониторинга, такие какmod_status
. Последний позволяет получить детальную информацию о работе Apache через веб-интерфейс. Для этого добавьте следующий фрагмент в конфигурацию Apache:<Location "/server-status"> SetHandler server-status Require ip <Ваш IP-адрес> </Location>
После этого вы можете просмотреть статус на
http://ваш_сервер/server-status
.
- Для проверки текущей загрузки и использования ресурсов сервера вы можете использовать такие утилиты, как
-
Проверка фактического использования MaxRequestWorkers:
- Запустите
apachectl -V
для выведения настроек компиляции Apache. Обратите внимание на пороговые значения и проверьте, соответствуют ли они вашим настройкам. - Вы также можете использовать команду
ps aux | grep httpd
для получения списка всех работающих процессов Apache и сравните число процессов с вашим лимитом.
- Запустите
Если вы продолжаете сталкиваться с проблемами, возможно, вам потребуется оптимизация конфигурации mpm_event_module
, например, изменение значений MinSpareThreads
, MaxSpareThreads
и других параметров, чтобы они соответствовали характеру нагрузки на вашем сервере. Рассмотрите также возможность использования системного мониторинга для получения уведомлений о достижении ресурсными ограничениями заранее. Это поможет вам своевременно принимать меры по повышению производительности и надежности вашего веб-сервера.