- Вопрос или проблема
- Ответ или решение
- 1. Исследование журнала доступа
- 2. Проверка производительности
- 3. Увеличение логирования
- 4. Настройка конфигурации сервера
- 5. Проверка соединений с MySQL
- 6. Мониторинг системных ресурсов
- 7. Использование утилит для диагностики
- 8. Проверка расширений и сценариев
- Заключение
Вопрос или проблема
Я использую 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-сервера, вам потребуется последовательный и многогранный подход, включающий как анализ логов, так и мониторинг системных ресурсов. Применение предложенных методов, таких как настройка конфигурации сервера и увеличение логирования, позволит вам выявить и устранить причину проблемы. Также не забывайте о регулярном обслуживании своего ПО и применении обновлений, так как они также могут значительно улучшить производительность.