Метрики производительности веб сервера
Вопрос:
Время выполнения некоторых действий в веб-приложении Business Studio занимает слишком много времени. В чём может быть причина?
Ответ:
Если веб-приложение работает медленно при выполнении фоновых задач, основное внимание следует уделить мониторингу потребления ресурсов (CPU, память) и корректной настройке конфигурации приложения. Ниже приведена универсальная процедура диагностики и оптимизации.
Диагностика
- Сбор и анализ метрик производительности
- Убедитесь, что в приложении включён сбор метрик процессорной нагрузки и потребления памяти (например, через Prometheus или аналогичные средства мониторинга). Описание метрик и порядок их просмотра см. в статье Просмотр и описание метрик.
- Проверьте метрики за период времени, в который наблюдается замедление работы:
- Загрузка центрального процессора (CPU %) процессами приложения: метрика
process_cpu_percent- процент потребления CPU процессом за всё время его работы; - Объём оперативной памяти, используемой процессами: метрика
process_private_mb{name=«…»,role=«…»}- приватная память отдельного процесса, метрикаprocess_private_total_mb- общий объём приватной памяти всех процессов, метрикаprocess_workingset_mb- физическая память процесса; - Количество процессов: метрика
processes_count.
- Просмотр загрузки процессора и памяти сервера
- Используйте инструменты мониторинга (например, Grafana, htop, Glances) для визуализации потребления CPU и RAM.
- Обратите внимание на процессы, которые показывают высокую нагрузку (CPU > 80% или значительное использование памяти).
- Зафиксируйте временные интервалы пиковой нагрузки для определения наиболее загруженных часов работы.
- Анализ активности Hangfire
- В представлении Hangfire (например, в Web-UI) проверьте количество активных и отложенных задач - убедитесь, что нет бесконечных или повторяющихся задач, которые могут перегружать систему.
Оптимизация
Направление оптимизации зависит от результатов диагностики:
- При высоком уровне загрузки CPU существуют следующие пути решения:
- Уменьшение количества preload-процессов (предзагруженных процессов) в конфигурации приложения appsettings.json (текущее количество процессов отображает метрика
processes_count):- «DefaultClientProcessPreloadCount» – количество предзагруженных клиентских процессов по умолчанию;
- «ClientProcessPreloadCount» – количество предзагруженных клиентских процессов для группы (база данных + ветка + редакция + очередь);
- «DefaultJobsProcessPreloadCount» – количество предзагруженных процессов фоновых задач по умолчанию;
- «JobsProcessPreloadCount» – количество предзагруженных процессов фоновых задач для группы (база данных + ветка + редакция + очередь).
- Уменьшение максимального числа процессов (общее количество процессов, которые могут выполняться одновременно) в конфигурации приложения appsettings.json (текущее количество процессов отображает метрика
processes_count):- «DefaultJobsProcessMaxCount» – максимальное количество процессов по умолчанию;
- «JobsProcessMaxCount» – максимальное количество процессов для группы.
- При высоком потреблении оперативной памяти, используемой процессами:
- Установка ограничений потребления ресурсов в конфигурации приложения appsettings.json:
- «TotalMemoryLimit» - максимальный размер оперативной памяти, при достижении которого дополнительные процессы перестанут запускаться (соотносится с метрикой
process_private_total_mb); - «ProcessMemoryLimit» - максимальный размер оперативной памяти, которую может использовать процесс; при превышении процесс будет остановлен (соотносится с метриками
process_private_mb{name=«…»,role=«…»}).
- Чтобы определить, какой лимит достигнут:
- сравните значение метрики
process_private_total_mbс параметром «TotalMemoryLimit»: если метрика больше лимита или близка к нему, новые процессы не запускаются; - сравните значения метрики
process_private_mbпо каждому процессу с параметром «ProcessMemoryLimit»: если значения заметно ниже лимита, изменять этот параметр не требуется.
Масштабирование инфраструктуры
Если конфигурация приложения уже оптимизирована, но текущие ресурсы физически не справляются с потоком пользователей и фоновых задач, необходимо масштабировать серверы.
- Вертикальное масштабирование.
- Увеличение тарифного плана вашего виртуального сервера или добавление физических компонентов: выделите приложению больше ядер CPU и дополнительный объем RAM.
- Горизонтальное масштабирование.
- Распределение компонентов приложения по разным серверам.
Мониторинг и повторная проверка
- После внесения изменений в конфигурацию выполните мягкий перезапуск приложения (см. Мягкий перезапуск), чтобы новые настройки вступили в силу.
- Повторный мониторинг метрик.
- Повторно проверьте CPU и потребление памяти через инструменты мониторинга.
- Убедитесь, что нагрузка снизилась и приложение работает стабильно.
- По мере стабилизации работы можно постепенно увеличивать количество процессов, если требуется повысить производительность.
Техподдержка
Если после выполнения инструкции приложение продолжает работать медленно, обратитесь по адресу техподдержки support@businessstudio.ru, предоставив:
- Скриншоты метрик CPU и памяти.
- Ошибки из логов (см. Сбор логов для техподдержки) в период пиковой загрузки при наличии.
- Текущую конфигурацию приложения (файл appsettings.json).
- Характеристики сервера.