Снятие трассировки событий для docker-контейнеров с компонентами системы Pilot
Снятие трассировки событий универсально для всех компонентов системы Pilot, поставляемых в docker-контейнерах, таких как Pilot-Server, Pilot-Web-Server, Pilot-myAdmin, Pilot-BIM-Serve.
Профилирование и получение трейсов может быть полезно для анализа следующих проблем:
- высокая загрузка CPU процессом;
- замедление работы приложения;
- зависание процесса.
Снятие трейсов осуществляется с помощью специального диагностического контейнера pilot-diagnostics. Он работает как вспомогательный контейнер, который запускается рядом с диагностируемым и использует общую нумерацию идентификаторов процессов (PID) и единое пространство имён.
Подготовка
|
При описании команд для работы с контейнерами используются обозначения: $ — команда исполняется от имени текущего пользователя, # — команда исполняется от имени привилегированного пользователя. В OC Linux привилегированные права для выполнения последующей команды можно выдать, например, с помощью sudo. |
Чтобы узнать имена и образы всех запущенных контейнеров, введите команду:
# docker ps --format "table {{.Names}}\t{{.Status)}}"
Установка вспомогательного контейнера pilot-diagnostics
- Загрузите образ контейнера pilot-diagnostics:
# docker pull registry.ascon.ru/project/pilotdev/pilot/pilot-diagnostics:latest
- Запустите и подключите к целевому контейнеру:
# docker run -it --rm --pid=container:container_name registry.ascon.ru/project/pilotdev/pilot/pilot-diagnostics:latest
Где:
container_name — имя диагностируемого контейнера.
Например:
sudo docker run -it --rm --pid=container:pilot-server registry.ascon.ru/project/pilotdev/pilot/pilot-diagnostics:latest
В выводе отобразится список .NET-процессов целевого контейнера. Найдите PID диагностируемого процесса. Например, процесс Pilot-Server — Ascon.Pilot.Daemon — обычно имеет идентификатор 1.
- Запустите контейнер с привязкой выходного каталога:
# docker run -it --rm --pid=container:container_name -v path:/diag registry.ascon.ru/project/pilotdev/pilot/pilot-diagnostics:latest 1
Где:
container_name — имя целевого контейнера;
path — путь к каталогу на хостовом компьютере для выходных файлов. Например, C:\Traces для Windows или /tmp/diag для Linux. Предварительно убедитесь, что данные папки созданы на хостовом компьютере;
1 — PID диагностируемого процесса.
Снятие трассировки
Для того чтобы снять трейсы, используйте команду:
# dotnet-trace collect -p 1 --duration 00:00:30 -o /diag/perf.nettrace
Где:
- 1 — PID диагностируемого процесса;
- perf.nettrace — имя файла с трейсами.
Возможные параметры:
| Параметр | Описание |
|---|---|
| --duration | Обязательный параметр. Указывает длительность сбора трейсов в формате HH:MM:SS. |
| --buffersize | Размер буфера в оперативной памяти в MB для временной записи трейсов перед их сохранением на диск. По умолчанию размер составляет 256MB. Например, # dotnet-trace collect -p 1 --duration 00:00:30 -o /diag/perf.nettrace --buffersize 1024 |
| --clrevents и --clreventlevel | Добавление этого параметра включает запись событий Common Language Runtime о внутренних операциях среды выполнения. Таких как уборка мусора, загрузка сборок и т.п. Например, # dotnet-trace collect -p 1 --duration 00:00:30 -o /diag/perf.nettrace --clrevents gc+threading --clrevenlevel informational |
| --providers | Список провайдеров событий. Провайдеры перечисляются через запятую в формате --providers Name:Level:Keywords,Name:Level:Keywords. Некоторые примеры ниже. |
Профили провайдеров
-
По умолчанию используется CPU-выборка. Этот профиль не нужно указывать:
# dotnet-trace collect -p 1 --duration 00:00:30 -o /diag/perf.nettrace
-
Чтобы включить счётчики GC и аллокации с упором на анализ загрузки сборок и модулей:
# dotnet-trace collect -p 1 --duration 00:00:30 \
--providers Microsoft-Windows-DotNETRuntime:4:4 \
-o /diag/perf.nettrace
-
Для полной детализации:
# dotnet-trace collect -p 1 --duration 00:00:30 \
--providers Microsoft-Windows-DotNETRuntime:0xFFFFFFFFFFFFFFFF:5 \
-o /diag/perf.nettrace
Для завершения сбора данных и сохранения файла трассировки нажмите Ctrl+C и Enter.
Извлечение трассировки
Файл доступен на хостовом компьютере по адресу, который вы указали в п.3. Например, /tmp/diag/perf.nettrace на Linux или C:\Traces\perf.nettrace на Windows.