Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

APACHE_MPM_EVENT_TUNING Linux / DevOps

Развертывание Apache MPM Event: расчет MaxRequestWorkers, ThreadsPerChild, ServerLimit

Обновлено: 21.08.2026
  • В логах Apache фиксируется предупреждение: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting.
  • Внезапные всплески задержек (latency) при обработке Keep-Alive соединений.
  • Нерациональный расход оперативной памяти процессами httpd/apache2.

1. Архитектура MPM Event

MPM Event использует выделенные потоки для прослушивания Keep-Alive сокетов без блокировки рабочих потоков, что позволяет обрабатывать тысячи параллельных подключений минимальным количеством процессов.

2. Формула расчета параметров

  • Total RAM for Apache = Доступная RAM сервера - RAM для ОС/БД/PHP-FPM
  • Avg Process Size = ~15-25 MB (без встроенного mod_php)
  • ServerLimit = (Total RAM for Apache) / (Avg Process Size)
  • MaxRequestWorkers = ServerLimit × ThreadsPerChild

3. Конфигурация /etc/apache2/mods-available/mpm_event.conf (Debian/Ubuntu)

Пример расчета для сервера с 8 GB RAM (выделено 4 GB под Apache):

<IfModule mpm_event_module>
    # Количество потоков на один дочерний процесс
    ThreadsPerChild             64
    # Максимальное число процессов
    ServerLimit                 32
    # Максимальное число параллельных запросов (32 * 64)
    MaxRequestWorkers           2048
    # Начальное число процессов
    StartServers                4
    # Минимальное число свободных потоков
    MinSpareThreads             64
    # Максимальное число свободных потоков
    MaxSpareThreads             256
    # Коэффициент асинхронных Keep-Alive соединений
    AsyncRequestWorkerFactor    2
    # Перезапуск процесса после обработки N запросов (защита от утечек)
    MaxConnectionsPerChild      10000
</IfModule>

4. Применение и мониторинг через mod_status

apachectl configtest && systemctl restart apache2
apachectl status
💡 Практика специалистов: При изменении параметров ServerLimit и ThreadsPerChild перезагрузки через graceful/reload недостаточно. Требуется полный перезапуск службы (systemctl restart apache2) для переаллокации сегментов Shared Memory ядра.

Частые вопросы (FAQ)

Что регулирует параметр AsyncRequestWorkerFactor?

Он определяет, сколько дополнительных Keep-Alive соединений сверх MaxRequestWorkers может принять один рабочий поток (по умолчанию 2). При значении 2 и 2048 воркерах Apache может удерживать до 4096 Keep-Alive сессий.

Почему при изменении MaxRequestWorkers нужно менять и ServerLimit?

ServerLimit задает жесткий верхний лимит процессов в разделяемой памяти Apache. Если MaxRequestWorkers / ThreadsPerChild превышает ServerLimit, Apache откажется запускаться с фатальной ошибкой.

Полезные материалы
Рекомендуем