У нас есть экземпляр nginx, расположенный перед apache 2 (nginx обрабатывает статические ресурсы, запросы динамического содержимого передаются через прокси в apache), который в основном использует mod_wsgi для сервера различных приложений python / django.
Мы внезапно наблюдаем высокую нагрузку на сервер (постоянно поднимающуюся до более чем 50, обычно менее 1) и ищем наилучшие способы найти причину.
Есть ли способ узнать, какие виртуальные хосты отвечают за процессы apache?
Также приветствуются некоторые общие советы по диагностике причины высокой нагрузки на сервер.
Изменить: спасибо всем за их помощь, это оказалось вызвано ошибкой кода, и перенастройка сервера не потребовалась. Однако предоставленные советы пригодятся в будущем.
В mod_status
модуль в Apache покажет вам, какой виртуальный хост / запрос обрабатывает конкретный процесс, но это будет полезно для вас, только если запросы являются долгоживущими. Добавление время исполнения (%D
) к вашему апачу LogFormat
тоже полезно.
Более важно выявить узкое место. Для этого нужно исследовать iostat
и vmstat
(обычно устанавливается по умолчанию) и прекрасный новый инструмент, который объединяет эти два и добавляет еще больше вещей, dstat
.
Если при запуске vmstat вы видите много действий в столбце «wa» под заголовком «cpu» (т. Е. Много времени, затрачиваемого на ожидание ввода / вывода), то я подозреваю, что проблема на самом деле в nginx, а не в Apache. Возможно, он выполняет слишком много операций ввода-вывода, потому что его буферы недостаточно велики для обработки проксируемого содержимого.
Попробуйте добавить это в nginx.conf:
proxy_buffers 32 4k;
При необходимости увеличьте.