Общие сведения о средствах диагностики в .NET Core

Программное обеспечение не всегда работает должным образом, но в .NET Core есть средства и API, которые помогут вам быстро и эффективно диагностировать проблемы.

Эта статья поможет вам выбрать нужные средства.

Отладчики

Отладчики позволяют взаимодействовать с программой. Приостановка, добавочное выполнение, изучение и возобновление работы дает представление о поведении кода. Отладчик — это хороший выбор для диагностики функциональных проблем, которые можно легко воспроизвести.

Модульное тестирование

Модульное тестирование — это ключевой компонент непрерывной интеграции и развертывания высококачественного программного обеспечения. Модульные тесты позволяют сразу же узнать о возникшей проблеме.

Инструментирование для наблюдаемости

.NET поддерживает стандартные отраслевые методы инструментирования с помощью метрик, журналов и распределенных трассировок. Инструментирование — это код, добавляемый в проект программного обеспечения для записи того, что он делает. Затем эти сведения можно собирать в файлах, базах данных или в памяти и анализироваться, чтобы понять, как работает программа программного обеспечения. Это часто используется в рабочих средах для мониторинга проблем и их диагностики. Среда выполнения .NET имеет встроенную инструментирование, которая может быть дополнительно включена и API, которые позволяют добавлять пользовательские инструментирования, специализированные для вашего приложения.

Метрики

Метрики — это количественные показатели, записываемые в течение определенного периода времени для отслеживания производительности и работоспособности приложения. Метрики часто используются для создания оповещений при обнаружении потенциальных проблем. Метрики имеют очень низкие издержки на производительность, и многие службы настраивают их как данные телеметрии с постоянной поддержкой.

Журналы

Ведение журнала — это метод, в котором код инструментируется для создания журнала, записи интересных событий, произошедших во время выполнения программы. Часто базовый набор событий журнала настраивается по умолчанию, и для диагностики конкретных проблем можно включить более обширное ведение журнала по запросу. Издержки на производительность зависят от объема регистрируемого объема данных.

Распределенные трассировки

Распределенная трассировка — это специализированная форма ведения журнала, которая помогает локализовать сбои и проблемы с производительностью в приложениях, распределенных между несколькими компьютерами или процессами. Эта методика отслеживает запросы через приложение, сопоставляя работу различных компонентов приложения и отделяя ее от другой работы, которую приложение может выполнять для параллельных запросов. При необходимости можно отслеживать каждый запрос и выборку, чтобы привязать затраты на производительность.

Файлы дампа

Дамп — это файл, содержащий моментальный снимок процесса во время создания. Он может использоваться при проверке состояния приложения для отладки.

Символы

Символы представляют собой сопоставление между исходным кодом и двоичным кодом, который создается компилятором. Они обычно используются отладчиками .NET для разрешения исходных номеров строк, имен локальных переменных и других типов диагностических данных.

Сбор диагностики в контейнерах

Средства диагностики, используемые в средах Linux без контейнеров, позволяют также осуществлять и сбор диагностики в контейнерах. Требуется лишь частично изменить использование, чтобы обеспечить работу этих средств в контейнере Docker.

Глобальные средства диагностики в .NET Core

dotnet-counters

dotnet-counters — это средство мониторинга производительности для первого уровня мониторинга работоспособности и анализа производительности. Оно отслеживает значения счетчиков производительности, опубликованные с помощью API EventCounter. Например, можно быстро отслеживать использование ЦП или частоту возникновения исключений в приложении .NET Core.

dotnet-dump

dotnet-dump — это средство сбора и анализа дампов ядра Windows и Linux без собственного отладчика.

dotnet-gcdump

Средство dotnet-gcdump предоставляет способ сбора дампов сборщика мусора (GC) для активных процессов .NET.

dotnet-trace

.NET Core включает в себя EventPipe, с помощью которого предоставляются диагностические данные. Средство dotnet-trace позволяет использовать интересные данные профилирования из приложения, которые могут помочь в сценариях, когда вам нужно найти причину медленной работы приложений.

dotnet-stack

Средство dotnet-stack позволяет быстро печатать управляемые стеки для всех потоков в выполняющемся процессе .NET.

dotnet-symbol

dotnet-symbol скачивает файлы (символы, DAC/DBI, файлы узлов и т. д.), требуемые для открытия основного дампа или минидампа. Используйте это средство, если для отладки файла дампа, записанного на другом компьютере, требуются символы и модули.

dotnet-sos

dotnet-sos устанавливает расширение отладки SOS на Linux и macOS (а также для Windows при использовании Windbg/cdb).

PerfCollect

PerfCollect — это скрипт bash, который можно использовать для сбора трассировок с помощью perf и LTTng для подробного анализа производительности приложений .NET, выполняющихся в дистрибутивах Linux.

Учебники по диагностике .NET Core

Написание собственного средства диагностики

Клиентская библиотека диагностики позволяет написать собственное средство диагностики, которое лучше всего подходит для вашего сценария диагностики. См. сведения в справочнике по API Microsoft.Diagnostics.NETCore.Client.

Отладка утечек памяти

Учебник. Отладка утечек памяти содержит пошаговые инструкции по поиску утечек памяти. Средство dotnet-counters позволяет подтвердить наличие утечки, а средство dotnet-dump используется для ее диагностики.

Отладка высокой загрузки ЦП

В руководстве по отладке высокой загрузки ЦП приводятся пошаговые инструкции по изучению высокой загрузки ЦП. Для подтверждения высокой загрузки ЦП используется средство dotnet-counters. Затем вы узнаете, как использовать служебную программу трассировки для анализа производительности (dotnet-trace) или perf для Linux, чтобы получить и просмотреть профиль загрузки ЦП.

Отладка взаимоблокировки

В руководстве по отладке взаимоблокировки показано, как использовать средство dotnet-dump для изучения потоков и блокировок.

Отладка starvation ThreadPool

Руководство по отладке нехватки threadPool показывает, как использовать средства dotnet-counters и dotnet-stack для исследования нехватки ThreadPool.

Отладка StackOverflow

Учебник. Отладка StackOverflow показывает процесс отладки StackOverflowException на Linux.

Отладка дампов Linux

Отладка дампов Linux — узнайте, как собирать и анализировать дампы в Linux.

Измерение производительности с помощью EventCounters

Учебник. Измерение производительности с помощью EventCounters в .NET демонстрирует, как использовать API EventCounter для измерения производительности в приложении .NET.