.NET Core에서 사용할 수 있는 진단 도구는 무엇인가요?

소프트웨어가 항상 예상한 대로 작동하지는 않지만 .NET Core에는 이러한 문제를 빠르고 효과적으로 진단할 수 있는 도구 및 API가 있습니다.

네이티브 AOT 배포는 .NET 7부터 사용 가능한 애플리케이션 모델입니다. 네이티브 AOT 앱에 대한 .NET 8 진단 지원에 대한 자세한 내용은 Native AOT 진단을 참조하세요.

이 문서는 필요한 다양한 도구를 찾는 데 도움이 됩니다.

디버거

디버거를 사용하여 프로그램과 상호 작용할 수 있습니다. 일시 중지, 증분 실행, 검사 및 다시 시작은 코드 동작에 대한 인사이트를 제공합니다. 디버거는 쉽게 재현될 수 있는 기능 문제를 진단하는 데 적합합니다.

단위 테스트

유닛 테스트는 고품질 소프트웨어의 연속 통합 및 배포를 위한 핵심 구성 요소입니다. 단위 테스트는 항목을 중단할 때 조기 경고를 제공하도록 설계되었습니다.

관찰 가능성을 위한 계측

.NET은 일반적으로 관찰 가능성의 세 가지 핵심 요소로 알려진 메트릭, 로그 및 분산 추적을 사용하는 업계 표준 계측 기술을 지원합니다.

계측은 수행하는 작업을 기록하기 위해 소프트웨어 프로젝트에 추가되는 코드입니다. 그런 다음 이 정보를 파일, 데이터베이스 또는 메모리 내에서 수집하고 분석하여 소프트웨어 프로그램이 작동하는 방식을 이해할 수 있습니다. 이는 종종 프로덕션 환경에서 문제를 모니터링하고 진단하는 데 사용됩니다. .NET 런타임에는 선택적으로 사용하도록 설정할 수 있는 기본 제공 계측과 애플리케이션용으로 특수화된 사용자 지정 계측을 추가할 수 있는 API가 있습니다.

로그

로깅은 코드가 계측되어 로그를 생성하는 기술로, 프로그램이 실행되는 동안 발생한 흥미로운 이벤트의 레코드입니다. 로그 이벤트의 기준 집합이 기본적으로 구성되는 경우가 많으며, 요청 시 더 광범위한 로깅을 사용하도록 설정하여 특정 문제를 진단할 수 있습니다. 기록되는 데이터의 양에 따라 성능 오버헤드가 가변적입니다.

대부분의 경우 기존 프로젝트에 로깅을 추가하든 새 프로젝트를 만들든 관계없이 ILogger 인프라가 좋은 기본 선택입니다. ILogger는 빠른 구조적 로깅, 유연한 구성, 그리고 ASP.NET 앱을 실행할 때 표시되는 콘솔을 포함한 공통 싱크 컬렉션을 지원합니다. 또한, ILogger 인터페이스는 풍부한 기능과 확장성을 제공하는 다양한 타사 로깅 구현에 대한 외관 역할을 할 수도 있습니다.

메트릭

메트릭은 애플리케이션 성능 및 상태를 모니터링하기 위해 시간을 두고 점차 기록되는 숫자 측정값입니다. 메트릭은 대개 잠재적 문제가 탐지될 때 경고를 생성하는 데 사용됩니다. 메트릭은 성능 오버헤드가 매우 낮으며 많은 서비스에서 항상 원격 분석으로 구성합니다. 예외는 종종 메트릭으로 기록되며 데이터의 카디널리티를 줄이기 위해 요약할 수 있습니다. 자세한 내용은 예외 요약을 참조하세요.

분산 추적

분산 추적은 여러 컴퓨터 또는 프로세스에 분산된 애플리케이션 내에서 오류 및 성능 문제를 지역화하는 데 도움이 되는 특수한 형태의 로깅입니다. 해당 기술은 애플리케이션을 통해 요청을 추적하여 다양한 애플리케이션 구성 요소에서 수행되는 작업을 함께 상호 연결하고 애플리케이션이 동시 요청에 대해 수행 중일 수 있는 다른 작업과 해당 작업을 구분합니다. 모든 요청을 추적할 수 있으며, 샘플링은 필요에 따라 성능 오버헤드를 바인딩하기 위해 사용될 수 있습니다.

계측 수집

다음과 같은 여러 가지 방법으로 애플리케이션에서 계측 데이터를 송신할 수 있습니다.

리소스 모니터링

리소스 모니터링은 시스템 내에서 다양한 컴퓨팅 리소스의 사용률, 성능 및 가용성을 지속적으로 관찰하고 추적하는 프로세스입니다. 이러한 리소스에는 하드웨어 구성 요소(예: CPU, 메모리, 디스크 스토리지 및 네트워크 인터페이스)뿐만 아니라 소프트웨어 구성 요소(예: 애플리케이션 및 서비스)가 포함될 수 있습니다. 리소스 모니터링은 성능 문제를 감지 및 진단하고 시스템이 예상 매개 변수 내에서 작동하도록 하는 데 자주 사용됩니다.

특수 진단

디버깅 또는 관찰 가능성으로 충분하지 않은 경우 .NET은 EventSource, 덤프, DiagnosticSource와 같은 추가 진단 메커니즘을 지원합니다. 자세한 내용은 특수 진단 문서를 참조하세요.

진단 도구

.NET은 애플리케이션을 진단하는 데 사용할 수 있는 다양한 CLI 도구를 지원합니다.

.NET Core 진단 자습서

사용자 고유의 진단 도구 작성

진단 클라이언트 라이브러리를 사용하면 진단 시나리오에 가장 적합한 사용자 지정 진단 도구를 직접 작성할 수 있습니다. Microsoft.Diagnostics.NETCore.Client API 참조에서 정보를 조회합니다.

메모리 누수 디버그

자습서: 메모리 누수 디버그에서는 메모리 누수를 찾는 과정을 안내합니다. dotnet-counters 도구는 누수를 확인하는 데 사용되고, dotnet-dump 도구는 누수를 진단하는 데 사용됩니다.

높은 CPU 사용량 디버그

자습서: 높은 CPU 사용량 디버그는 높은 CPU 사용량을 조사하는 과정을 안내합니다. dotnet-counters 도구를 사용하여 높은 CPU 사용량을 확인합니다. 그런 다음 성능 분석 유틸리티(dotnet-trace) 또는 Linux perf를 사용하여 CPU 사용량 프로필을 수집하고 보는 과정을 안내합니다.

디버그 교착 상태

자습서: 교착 상태 디버그dotnet-dump 도구를 사용하여 스레드와 잠금을 조사하는 방법을 안내합니다.

ThreadPool 고갈 디버그

자습서: threadPool 고갈 디버그dotnet-countersdotnet-stack 도구를 사용하여 ThreadPool 고갈을 조사하는 방법을 보여 줍니다.

StackOverflow 디버그

자습서: StackOverflow 디버그는 Linux에서 StackOverflowException을 디버그하는 방법을 보여 줍니다.

Linux 덤프 디버그

Linux 덤프 디버그는 Linux에서 덤프를 수집 및 분석하는 방법을 설명합니다.

EventCounters를 사용하여 성능 측정

자습서: .NET에서 EventCounters를 사용하여 성능 측정에서 EventCounter API를 사용하여 .NET 앱에서 성능을 측정하는 방법을 확인할 수 있습니다.