Снятие трассировки событий для 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

  1. Загрузите образ контейнера pilot-diagnostics:

    # docker pull registry.ascon.ru/project/pilotdev/pilot/pilot-diagnostics:latest

  2. Запустите и подключите к целевому контейнеру:

    # 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.

  3. Запустите контейнер с привязкой выходного каталога:

    # 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. Некоторые примеры ниже.

Профили провайдеров

  1. По умолчанию используется CPU-выборка. Этот профиль не нужно указывать:

    # dotnet-trace collect -p 1 --duration 00:00:30 -o /diag/perf.nettrace

  2. Чтобы включить счётчики GC и аллокации с упором на анализ загрузки сборок и модулей:

    # dotnet-trace collect -p 1 --duration 00:00:30 \

    --providers Microsoft-Windows-DotNETRuntime:4:4 \

    -o /diag/perf.nettrace

  3. Для полной детализации:

    # 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.

 

назад к списку вопросов