Apache Linux (Apache HTTP Server 2.4)

Apache — при нагрузке растёт очередь, но процессор не занят

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

На Apache при увеличении числа подключений растёт ожидание, однако CPU остаётся свободным. Возможны исчерпание рабочих потоков, очереди соединений, блокировка на внешней системе или медленные клиенты; без измерения нельзя делать вывод, что «Apache недостаточно мощный».

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

На Apache при увеличении числа подключений растёт ожидание, однако CPU остаётся свободным. Возможны исчерпание рабочих потоков, очереди соединений, блокировка на внешней системе или медленные клиенты; без измерения нельзя делать вывод, что «Apache недостаточно мощный».

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Достигнут лимит MaxRequestWorkersОжидание возникает при недостатке свободных рабочих обработчиков.Журнал сообщает AH00161 или BusyWorkers близок к пределуИзучить MPM и занятость потоков
Процессы ждут backend или I/OБлокировка на базе или файловой системе не требует полной загрузки CPU.CPU свободен, но активные запросы долго не завершаютсяПроверить время upstream и состояние дисков
Длинные соединения или медленные клиентыЗанятость соединений и рабочих слотов различается по MPM.Много клиентов в KeepAlive или передаче тела запросаПроверить connection states и настройки MPM

#Пошаговая диагностика и исправление

  1. Зафиксируйте периоды задержкиСравните метрики времени ответа с числом активных подключений. Не устраивайте нагрузочное испытание на работающем сайте без согласованного окна: достаточно доступных производственных графиков и обычного тестового URL.
  1. Определите MPM и пределыВ SSH узнайте, какой модуль MPM выбран — event, worker или prefork. Сравните MaxRequestWorkers, ThreadsPerChild, ServerLimit и журнал предупреждений; эти параметры не взаимозаменяемы, особенно при prefork.
  2. Debian пути; RHEL обычно /etc/httpd
    Linux · Терминал (Bash)КомандаНужен sudo
    Debian пути; RHEL обычно /etc/httpd. Только чтение.
    sudo apache2ctl -M | grep mpm; sudo grep -R -nE "MaxRequestWorkers|ThreadsPerChild|ServerLimit" /etc/apache2/
  1. Проверьте журнал на исчерпание рабочих обработчиковЗа последние минуты найдите сообщения о достижении MaxRequestWorkers, ошибках backend и затянувшихся запросах. Отсутствие предупреждения не гарантирует, что очередей нет, но указывает, что нужны дополнительные измерения.
  2. Debian systemd; путь к error_log виртуального хоста может отличаться
    Linux · Терминал (Bash)КомандаНужен sudo
    Debian systemd; путь к error_log виртуального хоста может отличаться.
    sudo journalctl -u apache2 --since "1 hour ago" --no-pager
  1. Измерьте состояние рабочих процессовЕсли mod_status уже настроен и защищён, посмотрите его server-status?auto из разрешённой локальной сети. Параметры BusyWorkers и IdleWorkers помогают определить занятость. Не включайте публичный /server-status и не раскрывайте частные URL/клиентов.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)КомандаНужен sudo
    Проверяет только наличие модуля, сам статус доступен исключительно по настроенному URL и авторизованному доступу.
    sudo apache2ctl -M | grep status
  1. Отделите сетевую очередь от времени обработкиНа сервере посмотрите ss -lnt, использование памяти и I/O. Если Receive-Q/Send-Q заметно растут, исследуйте возможность принятия соединений. Если при этом PHP-FPM/БД тормозит, изменение MaxRequestWorkers может лишь ухудшить потребление памяти.
  2. Только чтение; для дисковых задержек при наличии iostat используйте iostat -xz 1 3
    Linux · Терминал (Bash)КомандаНужен sudo
    Только чтение; для дисковых задержек при наличии iostat используйте iostat -xz 1 3.
    sudo ss -lnt; uptime; free -h; df -h
  1. Устраните найденное узкое местоЕсли исчерпан MaxRequestWorkers, оцените реальную память на процесс/поток и резерв, затем меняйте значения постепенно по документации используемого MPM. Если блокировка backend — оптимизируйте базу или пул PHP-FPM. Перед правкой Apache сделайте копию и проверку синтаксиса.
  2. Debian пример; изменение некоторых MPM-параметров может потребовать штатного restart
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Debian пример; изменение некоторых MPM-параметров может потребовать штатного restart.
    sudo apache2ctl -t && sudo systemctl reload apache2

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Как проверить результат

Во время сопоставимого периода обращений время ожидания снижается, нет сообщений об исчерпании рабочих обработчиков, расход памяти приемлем, у других сайтов на сервере нет ухудшения.

#Если проблема не устранена

Если CPU свободен, а очереди сохраняются, анализируйте зависимые сервисы, файловое I/O, сетевые соединения и блокировки приложений. Не поднимайте лимиты до сотен процессов без расчёта памяти.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.