Как проверить текущее значение MaxRequestWorkers, которое активно используется

Вопрос или проблема

Используя 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 сервер использует, выполните следующие действия:

  1. Проверьте логи Apache:

    • В первую очередь просмотрите файлы /var/log/httpd/error_log на предмет сообщений, касающихся достигаемого лимита MaxRequestWorkers или неудачных попыток создания дочерних процессов.
  2. Проверьте активные конфигурации:

    • Выполните команду apachectl -t -D DUMP_MODULES для проверки загруженных модулей и убедитесь, что mpm_event_module действительно загружен как модуль MPM.
    • Проверьте весь каталог конфигурации Apache, а именно /etc/httpd/conf и все его подпапки, на наличие других файлов, где могут быть переопределены параметры MaxRequestWorkers.
  3. Используйте утилиты мониторинга:

    • Для проверки текущей загрузки и использования ресурсов сервера вы можете использовать такие утилиты, как top, htop, или специализированные инструменты мониторинга, такие как mod_status. Последний позволяет получить детальную информацию о работе Apache через веб-интерфейс. Для этого добавьте следующий фрагмент в конфигурацию Apache:
      <Location "/server-status">
      SetHandler server-status
      Require ip <Ваш IP-адрес>
      </Location>

      После этого вы можете просмотреть статус на http://ваш_сервер/server-status.

  4. Проверка фактического использования MaxRequestWorkers:

    • Запустите apachectl -V для выведения настроек компиляции Apache. Обратите внимание на пороговые значения и проверьте, соответствуют ли они вашим настройкам.
    • Вы также можете использовать команду ps aux | grep httpd для получения списка всех работающих процессов Apache и сравните число процессов с вашим лимитом.

Если вы продолжаете сталкиваться с проблемами, возможно, вам потребуется оптимизация конфигурации mpm_event_module, например, изменение значений MinSpareThreads, MaxSpareThreads и других параметров, чтобы они соответствовали характеру нагрузки на вашем сервере. Рассмотрите также возможность использования системного мониторинга для получения уведомлений о достижении ресурсными ограничениями заранее. Это поможет вам своевременно принимать меры по повышению производительности и надежности вашего веб-сервера.

Оцените материал
Добавить комментарий

Капча загружается...