Поделиться через


Диагностика в .NET

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

Собственное развертывание AOT — это модель приложения, доступная с .NET 7. Сведения о поддержке диагностики .NET 8 для собственных приложений AOT см. в разделе диагностики Native AOT.

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

Отладчики

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

Профилировщики

Профилировщики позволяют анализировать производительность программы. Вы можете собирать данные об использовании памяти, использовании ЦП и других метриках для диагностики и понимания проблем с производительностью.

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

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

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

Logs

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

В большинстве случаев, независимо от того, следует ли добавлять ведение журнала в существующий проект или создавать новый проект, инфраструктура ILogger является хорошим выбором по умолчанию. ILogger поддерживает быстрое структурированное ведение журнала, гибкую конфигурацию и коллекцию распространенных приемников , включая консоль, которая отображается при запуске приложения ASP.NET. Кроме того, ILogger интерфейс также может служить фасадом для многих сторонних реализаций ведения журнала , которые предлагают широкие функциональные возможности и расширяемость.

Metrics

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

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

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

Сбор инструментирования

Существует несколько способов извлечения данных инструментирования из приложения, в том числе:

Специализированная диагностика

Если отладка или наблюдаемость недостаточно, .NET поддерживает дополнительные механизмы диагностики, такие как EventSource, Дампы, DiagnosticSource. Дополнительные сведения см. в статье о специализированной диагностике .

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

.NET поддерживает ряд средств CLI , которые можно использовать для диагностики приложений.

Руководства по диагностике .NET Core

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

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

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

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

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

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

Отладка Starvation ThreadPool

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

Отладка StackOverflow

Руководство по отладке StackOverflow демонстрирует отладку StackOverflowException в Linux.

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

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

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

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

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

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