소프트웨어가 항상 예상대로 동작하는 것은 아니지만 .NET에는 이러한 문제를 빠르고 효과적으로 진단하는 데 도움이 되는 도구와 API가 있습니다.
네이티브 AOT 배포 는 .NET 7부터 사용할 수 있는 애플리케이션 모델입니다. 네이티브 AOT 앱에 대한 .NET 8 진단 지원에 대한 자세한 내용은 네이티브 AOT 진단을 참조하세요.
이 문서는 필요한 다양한 도구를 찾는 데 도움이 됩니다.
디버거
디버거를 사용하면 프로그램과 상호 작용할 수 있습니다. 일시 중지, 증분 실행, 검사 및 다시 시작하면 코드 동작에 대한 인사이트를 얻을 수 있습니다. 디버거는 쉽게 재현할 수 있는 기능 문제를 진단하는 데 적합합니다.
프로파일러
프로파일러 를 사용하면 프로그램의 성능을 분석할 수 있습니다. 메모리 사용량, CPU 사용량 및 기타 메트릭에 대한 데이터를 수집하여 성능 문제를 진단하고 이해할 수 있습니다.
관찰성을 위한 계측
.NET은 일반적으로 관찰 가능성의 세 가지 핵심 요소로 알려진 메트릭, 로그 및 분산 추적을 사용하는 업계 표준 계측 기술을 지원합니다.
계측은 수행하는 작업을 기록하기 위해 소프트웨어 프로젝트에 추가되는 코드입니다. 그런 다음 파일, 데이터베이스 또는 메모리 내에서 이 정보를 수집하고 분석하여 소프트웨어 프로그램이 작동하는 방식을 이해할 수 있습니다. 이는 종종 프로덕션 환경에서 문제를 모니터링하고 진단하는 데 사용됩니다. .NET 런타임에는 선택적으로 사용하도록 설정할 수 있는 기본 제공 계측과 애플리케이션용으로 특수화된 사용자 지정 계측을 추가할 수 있는 API가 있습니다.
로그
로깅 은 프로그램이 실행되는 동안 발생한 흥미로운 이벤트의 레코드인 로그를 생성하기 위해 코드를 계측하는 기술입니다. 로그 이벤트의 기준 집합이 기본적으로 구성되는 경우가 많으며, 요청 시 보다 광범위한 로깅을 사용하도록 설정하여 특정 문제를 진단할 수 있습니다. 기록되는 데이터의 양에 따라 성능 오버헤드가 가변적입니다.
대부분의 경우 기존 프로젝트에 로깅을 추가하든 새 프로젝트를 만들든 ILogger 인프라 는 좋은 기본 선택입니다.
ILogger 는 ASP.NET 앱을 실행할 때 표시되는 콘솔을 비롯한 빠른 구조화된 로깅, 유연한 구성 및 일반적인 싱크 컬렉션을 지원합니다. 또한 인터페이스는 ILogger 풍부한 기능과 확장성을 제공하는 많은 타사 로깅 구현에 대한 외관 역할을 할 수도 있습니다.
Metrics
메트릭은 애플리케이션 성능 및 상태를 모니터링하기 위해 시간에 따라 기록되는 숫자 측정값입니다. 메트릭은 잠재적인 문제가 감지될 때 경고를 생성하는 데 자주 사용됩니다. 메트릭은 성능 오버헤드가 매우 낮으며 많은 서비스에서 항상 원격 분석으로 구성합니다. 예외는 종종 메트릭으로 기록되며 데이터의 카디널리티를 줄이기 위해 요약할 수 있습니다. 자세한 내용은 예외 요약을 참조하세요.
분산 추적
분산 추적 은 여러 컴퓨터 또는 프로세스에 분산된 애플리케이션 내에서 오류 및 성능 문제를 지역화하는 데 도움이 되는 특수한 형태의 로깅입니다. 이 기술은 애플리케이션을 통해 서로 다른 애플리케이션 구성 요소에서 수행하는 작업을 상호 연결하고 애플리케이션이 동시 요청에 대해 수행할 수 있는 다른 작업과 분리하는 요청을 추적합니다. 모든 요청을 추적할 수 있으며 샘플링은 필요에 따라 성능 오버헤드를 바인딩하기 위해 사용될 수 있습니다.
계측 수집
다음과 같은 여러 가지 방법으로 애플리케이션에서 계측 데이터를 송신할 수 있습니다.
- OpenTelemetry - 원격 분석 수집 및 내보내기를 위한 플랫폼 간 공급업체 중립적 표준
- dotnet-counters와 같은 .NET CLI 도구
- dotnet-monitor - 추적 및 원격 분석을 수집하기 위한 에이전트
- 타사 라이브러리 또는 앱 코드는 , ILogger<TCategoryName>및 System.Diagnostics.Activity API에서 System.Diagnostics.Metrics정보를 읽을 수 있습니다.
특수 진단
디버깅 또는 관찰성으로 충분하지 않은 경우 .NET은 EventSource, 덤프, DiagnosticSource와 같은 추가 진단 메커니즘을 지원합니다. 자세한 내용은 특수 진단 문서를 참조하세요.
진단 도구
.NET은 애플리케이션을 진단하는 데 사용할 수 있는 다양한 CLI 도구를 지원합니다.
.NET Core 진단 자습서
메모리 누수 디버그
자습서: 메모리 누수 디버그에서는 메모리 누 수 찾기를 안내합니다. dotnet-counters 도구는 누수를 확인하는 데 사용되며 dotnet-dump 도구는 누수를 진단하는 데 사용됩니다.
높은 CPU 사용량 디버그
자습서: 높은 CPU 사용량을 디버그하면 높은 CPU 사용 량을 조사하는 방법을 안내합니다.
dotnet-counters 도구를 사용하여 높은 CPU 사용량을 확인합니다. 그런 다음 성능 분석 유틸리티(dotnet-trace) 또는 Linux perf 에 Trace를 사용하여 CPU 사용량 프로필을 수집하고 보는 방법을 안내합니다.
교착 상태 디버그
자습서: 디버그 교착 상태는dotnet-dump 도구를 사용하여 스레드 및 잠금을 조사하는 방법을 보여 줍니다.
ThreadPool 굶주림 디버그
자습서: threadPool 고갈 디버그 에서는 dotnet-counters 및 dotnet-stack 도구를 사용하여 ThreadPool 고갈을 조사하는 방법을 보여 줍니다.
StackOverflow 디버그
자습서: StackOverflow 디버그 에서는 Linux에서 디버그하는 StackOverflowException 방법을 보여 줍니다.
Linux 덤프 디버그
Linux 덤프 디버그에서는 Linux 에서 덤프를 수집하고 분석하는 방법을 설명합니다.
EventCounters를 사용하여 성능 측정
자습서: .NET에서 EventCounters를 사용하여 성능 측정 은 API를 EventCounter 사용하여 .NET 앱에서 성능을 측정하는 방법을 보여 줍니다.
사용자 고유의 진단 도구 작성
진단 클라이언트 라이브러리를 사용하면 진단 시나리오에 가장 적합한 사용자 지정 진단 도구를 작성할 수 있습니다. 자세한 내용은 Microsoft.Diagnostics.NETCore.Client API 참조를 참조하세요.
.NET