이 문서는 버전 3.0.47001 이상 버전에 적용됩니다 ✔️ dotnet-counters .
.NET 5 이상을 실행하는 애플리케이션에서 카운터를 읽을 수 있습니다.
설치
다운로드하고 사용하는 dotnet-counters세 가지 방법이 있습니다.
원샷 실행(권장):
.NET 10.0.100부터 다음을 사용하여
dotnet-counters영구 설치 없이 실행할dnx수 있습니다.dnx dotnet-counters [options]다음은 그 예입니다.
dnx dotnet-counters monitor --process-id 1234이 방법은 시스템을 영구적으로 수정하지 않고 최신 버전을 자동으로 다운로드하고 실행합니다.
dotnet 전역 도구:
자주 사용할 수 있도록 최신 버전의
dotnet-countersNuGet 패키지를 설치하려면 dotnet 도구 설치 명령을 사용합니다.dotnet tool install --global dotnet-counters이 명령은 .NET SDK 도구 경로에 이진 파일을 설치
dotnet-counters합니다. 이 경로를 PATH에 추가하여 전역적으로 설치된 도구를 쉽게 호출할 수 있습니다.직접 다운로드:
플랫폼에 맞는 도구 실행 파일을 다운로드합니다.
OS 플랫폼 Windows x86 | x64 | 팔 | Arm-x64 Linux x64 | 팔 | Arm64 | musl-x64 | musl-Arm64
참고 항목
x86 앱에서 dotnet-counters를 사용하려면 해당하는 x86 버전의 도구가 필요합니다.
개요
dotnet-counters [-h|--help] [--version] <command>
설명
dotnet-counters는 임시 상태 모니터링 및 1단계 수준 성능 조사를 위한 성능 모니터링 도구입니다.
EventCounter API 또는 Meter API를 통해 게시된 성능 카운터 값을 관찰할 수 있습니다. 예를 들어, PerfView 또는 dotnet-trace를 사용하여 보다 심각한 성능 조사를 살펴보기 전에 의심스러운 내용이 있는지 확인하기 위해 .NET Core 애플리케이션에서 throw되는 CPU 사용량 또는 예외 비율과 같은 항목을 신속하게 모니터링할 수 있습니다.
옵션
--version유틸리티의
dotnet-counters버전을 표시합니다.-h|--help명령줄 도움말을 표시합니다.
명령
| 명령 |
|---|
| dotnet-counters collect |
| dotnet-counters 모니터 |
| dotnet-counters ps |
dotnet-counters collect
선택한 카운터 값을 주기적으로 수집하고 후처리를 위해 지정된 파일 형식으로 내보냅니다.
개요
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
옵션
-p|--process-id <PID>카운터 데이터를 수집할 프로세스의 ID입니다.
참고 항목
Linux 및 macOS에서 이 옵션을 사용하려면 대상 애플리케이션과
dotnet-counters동일한TMPDIR환경 변수를 공유해야 합니다. 그러지 않으면 명령 시간이 초과됩니다.-n|--name <name>카운터 데이터를 수집할 프로세스의 이름입니다.
참고 항목
Linux 및 macOS에서 이 옵션을 사용하려면 대상 애플리케이션과
dotnet-counters동일한TMPDIR환경 변수를 공유해야 합니다. 그러지 않으면 명령 시간이 초과됩니다.--diagnostic-port <port-address[,(listen|connect)]>모니터링할 프로세스와 통신하는 데 사용되는 진단 포트 를 설정합니다.
dotnet-counters대상 프로세스 내의 .NET 런타임은 하나의 수신 대기 및 다른 연결이 있는 포트 주소에 동의해야 합니다.dotnet-counters는 옵션을 사용하여 연결할 때 또는--process-id옵션을 사용하여--name-- <command>프로세스를 시작할 때 올바른 포트를 자동으로 결정합니다. 일반적으로 나중에 시작될 프로세스를 기다리거나 현재 프로세스 네임스페이스에 속하지 않는 컨테이너 내에서 실행되는 프로세스와 통신할 때만 포트를 명시적으로 지정해야 합니다.port-addressOS의 차이점은 다음과 같습니다.- Linux 및 macOS - Unix 도메인 소켓에 대한 경로(예:
/foo/tool1.socket. - Windows - 명명된 파이프 경로(예:
\\.\pipe\my_diag_port1. - Android, iOS 및 tvOS - IP:port(예:
127.0.0.1:9000.
기본적으로
dotnet-counters지정된 주소에서 수신 대기합니다. 대신 주소 뒤를dotnet-counters추가하여 연결을 요청할,connect수 있습니다. 예를 들어--diagnostic-port /foo/tool1.socket,connectUnix 도메인 소켓을 수신 대기하는 .NET 런타임 프로세스에/foo/tool1.socket연결합니다.이 옵션을 사용하여 앱 시작에서 카운터 모니터링을 시작하는 방법에 대한 자세한 내용은 진단 포트 사용을 참조하세요.
- Linux 및 macOS - Unix 도메인 소켓에 대한 경로(예:
--refresh-interval <SECONDS>표시된 카운터 업데이트 사이의 지연 시간(초)입니다.
--counters <COUNTERS>쉼표로 구분된 카운터 목록입니다. 카운터는
provider_name[:counter_name]을 지정할 수 있습니다. 적격 카운터 목록 없이provider_name이 사용되는 경우 공급자의 모든 카운터가 표시됩니다. 공급자 및 카운터 이름을 검색하려면 기본 제공 메트릭을 참조하세요. EventCountersprovider_name의 경우 EventSource의 이름이며 미터provider_name의 이름은 미터의 이름입니다.--format <csv|json>내보낼 형식입니다. 현재 csv와 json을 사용할 수 있습니다.
-o|--output <output>출력 파일의 이름입니다.
-- <command>컬렉션 구성 매개 변수 후에 사용자는 명령을 추가하여
--.NET 애플리케이션을 시작할 수 있습니다.dotnet-counters는 제공된 명령을 사용하여 프로세스를 시작하고 요청된 메트릭을 수집합니다. 이는 애플리케이션의 시작 경로에 대한 메트릭을 수집하는 데 유용하며 주 진입점 이전 또는 직후에 발생하는 문제를 진단하거나 모니터링하는 데 사용할 수 있습니다.참고 항목
이 옵션을 사용하면 도구와 다시 통신하는 첫 번째 .NET 프로세스를 모니터링합니다. 즉, 명령이 여러 .NET 애플리케이션을 시작하는 경우 첫 번째 앱만 수집합니다. 따라서 자체 포함 애플리케이션에서 이 옵션을 사용하거나 이 옵션을 사용하는
dotnet exec <app.dll>것이 좋습니다.참고 항목
.NET 실행 파일을 통해
dotnet-counters시작하면 해당 입력/출력이 리디렉션되고 해당 stdin/stdout과 상호 작용할 수 없습니다. Ctrl+C 또는 SIGTERM을 통해 도구를 종료하여 도구와 자식 프로세스를 모두 안전하게 종료할 수 있습니다. 자식 프로세스가 도구보다 먼저 종료되면 도구도 종료됩니다. Stdin/stdout을 사용해야 하는 경우--diagnostic-port옵션을 사용할 수 있습니다. 자세한 내용은 진단 포트 사용을 참조하세요.
참고 항목
dotnet-counters를 사용하여 메트릭을 수집하려면 대상 프로세스를 실행하는 사용자와 동일한 사용자 또는 루트로 실행해야 합니다. 그러지 않으면 도구는 대상 프로세스와 연결을 설정하지 못합니다.
예제
3초의 새로 고침 간격으로 모든 카운터를 수집하고 csv를 출력으로 생성합니다.
> dotnet-counters collect --process-id 1902 --refresh-interval 3 --format csv --counters is unspecified. Monitoring System.Runtime counters by default. Starting a counter session. Press Q to quit.dotnet mvc.dll을 자식 프로세스로 시작하고 시작에서 런타임 카운터 및 ASP.NET Core 호스팅 카운터 수집을 시작하여 JSON 출력으로 저장합니다.> dotnet-counters collect --format json --counters System.Runtime,Microsoft.AspNetCore.Hosting -- dotnet mvc.dll Starting a counter session. Press Q to quit. File saved to counter.json
dotnet-counters 모니터
선택한 카운터의 값을 주기적으로 새로 고치는 방법을 표시합니다.
개요
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
옵션
-p|--process-id <PID>모니터링할 프로세스의 ID입니다.
-n|--name <name>모니터링할 프로세스의 이름입니다.
--diagnostic-port만들 진단 포트의 이름입니다. 이 옵션을 사용하여 앱 시작부터 카운터 모니터링을 시작하는 방법은 진단 포트 사용을 참조하세요.
--refresh-interval <SECONDS>표시된 카운터 업데이트 사이의 지연 시간(초)입니다.
--counters <COUNTERS>쉼표로 구분된 카운터 목록입니다. 카운터는
provider_name[:counter_name]을 지정할 수 있습니다. 적격 카운터 목록 없이provider_name이 사용되는 경우 공급자의 모든 카운터가 표시됩니다. 공급자 및 카운터 이름을 검색하려면 기본 제공 메트릭을 참조하세요. EventCountersprovider_name의 경우 EventSource의 이름이며 미터provider_name의 이름은 미터의 이름입니다.-- <command>컬렉션 구성 매개 변수 뒤에 명령을 추가하여
--.NET 애플리케이션을 시작할 수 있습니다.dotnet-counters는 제공된 명령을 사용하여 프로세스를 시작하고 요청된 메트릭을 모니터링합니다. 이는 애플리케이션의 시작 경로에 대한 메트릭을 수집하는 데 유용하며 주 진입점 이전 또는 직후에 발생하는 문제를 진단하거나 모니터링하는 데 사용할 수 있습니다.참고 항목
이 옵션을 사용하면 도구와 다시 통신하는 첫 번째 .NET 프로세스를 모니터링합니다. 즉, 명령이 여러 .NET 애플리케이션을 시작하는 경우 첫 번째 앱만 수집합니다. 따라서 자체 포함 애플리케이션에서 이 옵션을 사용하거나 이 옵션을 사용하는
dotnet exec <app.dll>것이 좋습니다.참고 항목
.NET 실행 파일을 통해
dotnet-counters시작하면 입력/출력이 리디렉션되며 해당 stdin/stdout과 상호 작용할 수 없습니다. Ctrl+C 또는 SIGTERM을 통해 도구를 종료하여 도구와 자식 프로세스를 모두 안전하게 종료할 수 있습니다. 자식 프로세스가 도구보다 먼저 종료되면 도구도 종료됩니다. Stdin/stdout을 사용해야 하는 경우--diagnostic-port옵션을 사용할 수 있습니다. 자세한 내용은 진단 포트 사용을 참조하세요.
참고 항목
Linux 및 macOS에서 해당 명령은 대상 애플리케이션 및 dotnet-counters가 동일한 TMPDIR 환경 변수를 공유할 것으로 예상합니다.
참고 항목
dotnet-counters를 사용하여 메트릭을 모니터링하려면 대상 프로세스를 실행하는 사용자와 동일한 사용자 또는 루트로 실행해야 합니다.
참고 항목
다음과 [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.유사한 오류 메시지가 표시되는 경우 대상 프로세스와 비트가 일치하지 않는 오류 메시지를 사용 dotnet-counters 하려고 합니다.
설치 링크에서 도구의 올바른 비트 수를 다운로드해야 합니다.
예제
3초의 새로 고침 간격으로
System.Runtime의 모든 카운터를 모니터링합니다.> dotnet-counters monitor --process-id 1902 --refresh-interval 3 --counters System.Runtime Press p to pause, r to resume, q to quit. Status: Running Name Current Value [System.Runtime] dotnet.assembly.count ({assembly}) 115 dotnet.gc.collections ({collection}) gc.heap.generation ------------------ gen0 5 gen1 1 gen2 1 dotnet.gc.heap.total_allocated (By) 1.6947e+08 dotnet.gc.last_collection.heap.fragmentation.size (By) gc.heap.generation ------------------ gen0 0 gen1 348,248 gen2 0 loh 32 poh 0 dotnet.gc.last_collection.heap.size (By) gc.heap.generation ------------------ gen0 0 gen1 18,010,920 gen2 5,065,600 loh 98,384 poh 3,407,048 dotnet.gc.last_collection.memory.committed_size (By) 66,842,624 dotnet.gc.pause.time (s) 0.05 dotnet.jit.compilation.time (s) 1.317 dotnet.jit.compiled_il.size (By) 574,886 dotnet.jit.compiled_methods ({method}) 6,008 dotnet.monitor.lock_contentions ({contention}) 194 dotnet.process.cpu.count ({cpu}) 16 dotnet.process.cpu.time (s) cpu.mode -------- system 4.953 user 6.266 dotnet.process.memory.working_set (By) 1.3217e+08 dotnet.thread_pool.queue.length ({work_item}) 0 dotnet.thread_pool.thread.count ({thread}) 133 dotnet.thread_pool.work_item.count ({work_item}) 71,188 dotnet.timer.count ({timer}) 124참고 항목
앱에서 .NET 버전 8 이하를 사용하는 경우 System.Runtime 미터 는 해당 버전
dotnet-counters에 존재하지 않으며 대신 이전 System.Runtime EventCounters 를 표시하기 위해 대체됩니다. 여기에 표시된 것처럼 UI는 약간 다르게 보입니다.[System.Runtime] % Time in GC since last GC (%) 0 Allocation Rate (B / 1 sec) 5,376 CPU Usage (%) 0 Exception Count (Count / 1 sec) 0 GC Fragmentation (%) 48.467 GC Heap Size (MB) 0 Gen 0 GC Count (Count / 1 sec) 1 Gen 0 Size (B) 24 Gen 1 GC Count (Count / 1 sec) 1 Gen 1 Size (B) 24 Gen 2 GC Count (Count / 1 sec) 1 Gen 2 Size (B) 272,000 IL Bytes Jitted (B) 19,449 LOH Size (B) 19,640 Monitor Lock Contention Count (Count / 1 sec) 0 Number of Active Timers 0 Number of Assemblies Loaded 7 Number of Methods Jitted 166 POH (Pinned Object Heap) Size (B) 24 ThreadPool Completed Work Item Count (Count / 1 sec) 0 ThreadPool Queue Length 0 ThreadPool Thread Count 2 Working Set (MB) 19다음에서
System.Runtime가비지 수집 및 가비지 수집 힙 할당만 모니터링합니다.> dotnet-counters monitor --process-id 1902 --counters System.Runtime[dotnet.gc.collections,dotnet.gc.heap.total_allocated] Press p to pause, r to resume, q to quit. Status: Running Name Current Value [System.Runtime] dotnet.gc.collections ({collection}) gc.heap.generation ------------------ gen0 0 gen1 0 gen2 0 dotnet.gc.heap.total_allocated (By) 9,943,384사용자 정의
EventCounter에서EventSource값을 모니터링합니다. 자세한 내용은 자습서: .NET Core에서 EventCounters를 사용하여 성능 측정을 참조하세요.> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal Press p to pause, r to resume, q to quit. request 100시작 시 로드된 어셈블리의 #을 시작하고
my-aspnet-server.exe모니터링합니다.> dotnet-counters monitor --counters System.Runtime[dotnet.assembly.count] -- my-aspnet-server.exe Press p to pause, r to resume, q to quit. Status: Running Name Current Value [System.Runtime] dotnet.assembly.count ({assembly}) 11명령줄 인수로
my-aspnet-server.exearg1시작하고arg2시작부터 작업 집합 및 GC 힙 크기를 모니터링합니다.> dotnet-counters monitor --counters System.Runtime[dotnet.process.memory.working_set,dotnet.gc.last_collection.heap.size] -- my-aspnet-server.exe arg1 arg2Name Current Value [System.Runtime] dotnet.gc.last_collection.heap.size (By) gc.heap.generation ------------------ gen0 560 gen1 462,720 gen2 0 loh 0 poh 8,184 dotnet.process.memory.working_set (By) 48,431,104
dotnet-counters ps
dotnet-counters에서 모니터링할 수 있는 dotnet 프로세스를 나열합니다.
dotnet-counters 버전 6.0.320703 이상에서는 사용 가능한 경우 각 프로세스가 시작된 명령줄 인수도 표시합니다.
개요
dotnet-counters ps [-h|--help]
예시
dotnet run --configuration Release 명령을 사용하여 장기 실행 앱을 시작한다고 가정해 보겠습니다. 다른 창에서 dotnet-counters ps 명령을 실행합니다. 표시되는 출력은 다음과 같습니다. 명령줄 인수가 있는 경우 dotnet-counters 버전 6.0.320703 이상에서 표시됩니다.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
진단 포트 사용
진단 포트 는 앱 시작에서 카운터 모니터링 또는 수집을 시작할 수 있는 런타임 기능입니다. 이 작업을 사용 dotnet-counters하려면 이전 예제에 설명된 대로 사용 dotnet-counters <collect|monitor> -- <command> 하거나 옵션을 사용할 --diagnostic-port 수 있습니다.
dotnet-counters <collect|monitor> -- <command>를 사용하여 애플리케이션을 자식 프로세스로 실행하는 것이 시작부터 빠르게 모니터링하는 가장 간단한 방법입니다.
하지만 모니터링되는 앱의 수명을 더 세부적으로 제어하거나(예: 처음 10분간만 앱을 모니터링하고 실행 계속) CLI를 사용하여 앱을 조작해야 하는 경우에는 --diagnostic-port 옵션을 사용하여 모니터링되는 대상 앱과 dotnet-counters를 모두 제어할 수 있습니다.
다음 명령은
dotnet-counters명명myport.sock된 진단 소켓을 만들고 연결을 기다립니다.dotnet-counters collect --diagnostic-port myport.sock출력
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock별도의 콘솔에서
DOTNET_DiagnosticPorts환경 변수를dotnet-counters출력의 값으로 설정하고 대상 애플리케이션을 시작합니다.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2이렇게 하면 다음에서 카운터 수집을 시작할 수
dotnet-counters있습니다.my-dotnet-appWaiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=myport.sock Starting a counter session. Press Q to quit.Important
dotnet CLI가 앱
dotnet run이 아닌 많은 자식 프로세스를 생성하고 앱 앞에 연결하여dotnet-counters런타임에 앱을 일시 중단하도록 할 수 있기 때문에 앱을 시작하는 것은 문제가 될 수 있습니다. 자체 포함된 버전의 앱을 직접 사용하거나 애플리케이션을 시작하는 데 사용하는dotnet exec것이 좋습니다.
.NET