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