Как мне определить, что вызывает медленную работу веб-сервера Apache?

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

Я использую Apache 2.4 (64 бита) на сервере Windows. Он также использует MySQL 5.7 на том же сервере.

В последнее время он очень медленно загружается, но когда я смотрю на журналы доступа, соединений очень мало. Я вижу некоторые попытки получить доступ к phpmyadmin и другим скриптам (никаких из которых не существует), но не сотни таких запросов.

Когда я посмотрел на потребление памяти httpd и MySQL, они оба были очень низкими и стабильными:

#tasklist
httpd  50,003 K
mysql  205,000 K

Перезапуск MySQL не дал никакого результата в производительности или памяти. Но после перезапуска httpd он теперь потребляет 39,000 K памяти, и сайт снова стал отзывчивым.

Я посмотрел в журналы и не вижу ничего необычного. Как мне определить, что делает сайт таким нереспонсивным?

ИЗМЕНЕНИЕ Я не знаю, поможет ли это, но я собираюсь попробовать этот фикс: (упомянутый здесь: https://superuser.com/a/627251/223518 и здесь: https://stackoverflow.com/a/21033620/857025 )

Добавьте следующее в httpd.conf и перезапустите httpd:

AcceptFilter http none
AcceptFilter https none

Используйте top, чтобы отобразить текущие процессы. Вы можете отсортировать по использованию памяти, нажав M (заглавная M) или по использованию CPU, нажав P (заглавная P). Как только вы определили процесс, потребляющий много памяти, вы можете использовать столбцы PID и COMMAND, чтобы идентифицировать ошибочный процесс.

Ответ или решение

Для диагностики медленной работы веб-сервера Apache на вашем Windows-сервере, работающем под управлением Apache 2.4 и MySQL 5.7, следует предпринять последовательный подход, учитывающий как программные, так и аппаратные аспекты.

1. Исследование журнала доступа

Первый шаг — проанализировать журналы доступа (access logs). Обратите внимание на ошибки (например, 404) и подозрительные запросы. Поскольку вы упомянули наличие попыток доступа к несуществующим скриптам (например, phpMyAdmin), это может свидетельствовать о том, что ваш сервер стал объектом несанкционированных запросов. Убедитесь, что все потенциальные уязвимости закрыты.

2. Проверка производительности

С помощью команды tasklist вы уже наблюдали использование памяти процессами httpd и MySQL. Хотя вы указали, что использование памяти остается низким, это не обязательно означает, что сервер работает эффективно:

httpd  50,003 K
mysql  205,000 K

Попробуйте использовать Performance Monitor (PerfMon), чтобы отслеживать более детальные метрики производительности, такие как:

  • Время ответа
  • Нагрузка процессора
  • Скорость чтения/записи на диск

3. Увеличение логирования

Увеличьте уровень логирования в Apache, добавив следующую строку в ваш файл конфигурации httpd.conf:

LogLevel debug

Это даст вам более подробные сведения о том, что происходит на сервере и почему он может работать медленно. Не забудьте вернуть уровень логирования к обычному после завершения диагностики, чтобы не загромождать ваши логи ненужной информацией.

4. Настройка конфигурации сервера

Вы уже сделали хорошее дополнение к конфигурации, чтобы отключить фильтры приемки:

AcceptFilter http none
AcceptFilter https none

Это решение может помочь улучшить общую производительность, особенно в условиях высокой нагрузки. После применения новой конфигурации не забудьте перезапустить Apache для применения изменений.

5. Проверка соединений с MySQL

Медленная работа веб-приложения может быть связана с проблемами соединения с базой данных MySQL. Используйте SHOW PROCESSLIST; в MySQL для определения долгосрочных запросов, которые могут блокировать остальные операции. Если вы встречаете множество ожидающих соединений, возможно, стоит оптимизировать ваши запросы или увеличить лимиты соединений в конфигурации MySQL.

6. Мониторинг системных ресурсов

Системные ресурсы, такие как CPU и дисковая система, имеют решающее значение. Используйте Performance Monitor или Task Manager для отслеживания использования CPU, а также ввода/вывода на диск. Часто медлительность связана именно с ограничениями по I/O.

7. Использование утилит для диагностики

  • Apache Bench (ab): Для тестирования производительности путем создания нагрузки на сервер. Это позволит вам выявить, как сервер реагирует при увеличении количества запросов.
  • Wireshark или Fiddler: Для анализа сетевого трафика и выявления медленных или заблокированных запросов.

8. Проверка расширений и сценариев

Не забывайте, что некоторые сценарии (например, PHP) могут быть неэффективными. Попробуйте отключить расширения или модули, чтобы убедиться, что медленная работа не связана с конкретным кодом.

Заключение

Чтобы выяснить, что может вызывать медлительность вашего Apache-сервера, вам потребуется последовательный и многогранный подход, включающий как анализ логов, так и мониторинг системных ресурсов. Применение предложенных методов, таких как настройка конфигурации сервера и увеличение логирования, позволит вам выявить и устранить причину проблемы. Также не забывайте о регулярном обслуживании своего ПО и применении обновлений, так как они также могут значительно улучшить производительность.

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

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