다음을 통해 공유


Dtrace

Windows Server 2025 dtrace 부터는 기본 제공 도구로 포함되어 있습니다. DTrace는 사용자가 시스템 성능을 실시간으로 모니터링하고 디버그할 수 있는 명령줄 유틸리티입니다. 사용자는 코드 dtrace자체를 수정하지 않고도 커널 및 사용자 공간 코드를 동적으로 계측할 수 있습니다.

이 강력한 도구는 사용자 수준 이벤트의 집계, 히스토그램 및 추적을 비롯한 다양한 데이터 수집 및 분석 기술을 지원합니다. 스크립트에서 dtrace 모니터링할 프로브와 프로브가 실행될 때 수행할 작업을 정의하는 스크립트에서 프로브를 지정할 수 있습니다. 프로브는 이러한 작업을 수행하기 위해 데이터를 수집할 수 있는 코드의 특정 지점입니다.

참고 항목

이 기본 제공 포트는 dtrace Windows용 DTrace의 MSI 설치 관리자와 매개 변수 및 기타 기능과 다릅니다. Windows용 DTrace에 대한 자세한 내용은 Windows의 DTrace를 참조하세요.

DTrace 사용에 대한 포괄적인 가이드는 동적 추적 가이드를 참조 하세요.

DTrace 사용

사용 dtrace 하려면 먼저 사용하도록 설정해야 합니다. 사용하도록 설정 dtrace하려면 관리자 권한 명령 프롬프트 또는 PowerShell을 관리자 권한으로 열고 다음을 실행합니다.

bcdedit /set dtrace on

이 변경 내용이 적용되려면 다시 부팅해야 합니다.

Syntax

dtrace [-BCeFhlqSvVwYZ] [-b bufsz] [-c cmd] [-D name[=def]] [-I path]
[-L path] [-o output] [-p pid] [-s script] [-U name] [-x opt[=val]] [-X a|c|s|t]
[-y symbol path]

[-P provider [[ predicate ] action ]] [-m [ provider: ]
module [[ predicate ] action ]] [-f [[ provider: ] module: ]
func [[ predicate ] action ]] [-n [[[ provider: ] module: ] func: ]
name [[ predicate ] action ]] [-i probe-id [[ predicate ] action ]] [ args ... ]

참고 항목

dtrace.exe 매개 변수는 대/소문자를 구분합니다. 예기치 않은 동작을 방지하기 위해 매개 변수를 지정할 때 올바른 대/소문자를 사용해야 합니다.

매개 변수 설명
-B <bufsz> 추적 데이터를 저장하는 데 사용되는 버퍼의 크기를 설정합니다. 여기서 bufsz는 버퍼의 원하는 크기(바이트, K), 메가바이트(m) 또는 기가바이트(g)입니다.
-C <cmd> 지정된 명령을 실행하고 완료되면 종료됩니다. 여기서 cmd 는 추적을 시작하기 전에 실행하려는 명령입니다. 둘 이상의 -c 인스턴스를 사용하는 경우 모든 명령 실행이 완료되면 dtrace가 종료되고 각 자식 프로세스에 대한 종료 상태 보고합니다.
C- 추적을 실행하기 전에 스크립트 파일에서 ucpp 전처리기를 실행합니다.
-D <name>=<def> 전처리기를 호출할 때 기호를 정의합니다. 여기서 이름은 정의할 기호의 이름이고 def 는 기호에 할당할 선택적 값입니다.
-e 요청을 컴파일한 후 프로브를 사용하도록 설정하기 전에 종료됩니다.
f- 지정된 함수 이름과 일치하는 프로브를 사용하거나 나열합니다.
-F 추적 출력을 함수별로 결합하여 분석하기 쉽습니다.
-H 정적 프로브에 대한 정의가 있는 헤더 파일을 생성합니다.
-나 <probe-id> 프로브 ID가 추적할 프로브의 식별자인 지정된 프로브 ID 와 일치하는 프로브 를 사용하거나 나열합니다.
-나 <path> 지정된 디렉터리를 전처리기 검색 경로에 추가합니다. 여기서 경로는 #include 파일을 포함하는 추가하려는 디렉터리입니다.
-l -P, -m, -f, -n, -i 및 -s 매개 변수를 기반으로 지정된 조건과 일치하는 프로브를 나열합니다. 이러한 매개 변수를 지정하지 않으면 모든 프로브가 나열됩니다.
-L <path> 지정된 디렉터리를 라이브러리 검색 경로에 추가합니다. 여기서 경로 는 공통 정의를 포함하는 추가하려는 라이브러리 디렉터리입니다.
-m 형식 공급자:모듈 또는 모듈을 사용하여 인수에서 지정된 모듈 이름과 일치하는 프로브를 사용하거나 나열합니다. 모듈 이름 외에 한정자를 지정하지 않으면 해당 모듈 이름을 가진 모든 프로브가 일치합니다.
-n 형식 공급자:module:function:name, module:function:name, function:name 또는 name사용하여 인수에서 지정된 프로브 이름과 일치하는 프로브를 사용하거나 나열합니다. 한정자를 프로브 이름 외에 지정하지 않으면 해당 이름의 모든 프로브가 일치합니다.
-O <output> 추적 데이터의 출력 파일을 설정합니다. 여기서 출력 은 추적 데이터에 사용할 파일의 이름입니다.
-p <pid> 지정된 PID(프로세스 ID)를 가져오고 해당 기호 테이블을 캐시합니다. 이 테이블은 프로그램의 동작을 분석하는 데 사용할 수 있습니다.
-P <provider> 공급자가 공급자의 이름인 지정된 공급자 이름과 일치하는 프로브를 사용하거나 나열합니다. -P 매개 변수의 인스턴스를 두 개 이상 동시에 사용할 수 있습니다.
-Q 명시적으로 추적된 데이터만 출력하는 자동 모드를 설정합니다.
-s <script> 지정된 D 스크립트에 따라 프로브를 사용하거나 나열합니다. 여기서 스크립트 는 실행하려는 스크립트의 이름입니다. -e를 지정하면 프로그램이 컴파일되지만 데이터 수집이 수행되지 않습니다. -l을 지정하면 프로그램이 컴파일되고 일치하는 프로브 목록이 표시되지만 데이터 수집은 수행되지 않습니다. -e 또는 -l을 지정하지 않으면 프로그램이 컴파일되고 지정된 프로브에 따라 데이터 수집이 수행되고 추적이 시작됩니다.
S- stderr로 디버깅하기 위한 D-언어 컴파일러 중간 코드를 인쇄합니다.
-U <name> 전처리기를 호출할 때 기호를 정의 해제합니다. 여기서 이름은 정의 취소하려는 기호의 이름입니다.
-v 안정성 특성 및 인수를 보고하는 자세한 정보 표시 모드를 설정합니다.
-v dtrace API의 버전을 표시합니다.
-w -s, -P, -m, -f, -n 또는 -i 매개 변수로 지정된 경우 파괴적인 작업을 허용합니다. 파괴적인 작업에는 커널 변수 수정, 시스템 호출 동작 변경 또는 시스템 충돌과 같은 작업이 포함될 수 있습니다.
-X <opt>=<val> 컴파일러 및 추적 옵션을 사용하거나 수정합니다. 여기서 opt는 사용하거나 수정하려는 옵션의 이름이고 val은 선택적 값입니다.
-X <a|c|s|t> 컴파일 중인 C 코드가 cpp를 호출할 때 ISO C 표준을 준수하는 방법을 제어합니다. 사용 가능한 인수는 다음과 같습니다.
  • -Xa (기본값): ISO C에 필요한 의미 체계 변경 내용과 함께 ISO C와 K&R 호환성 확장을 제공합니다. 미리 정의된 매크로 __STDC__ cpp가 호출될 때 값 이 0 입니다.
  • -Xc (규칙): K&R C 호환성 확장 없이 ISO C를 엄격하게 준수합니다. 미리 정의된 매크로 __STDC__ cpp가 호출될 때 값 이 1 입니다.
  • -Xs (K&R C): K&R C만 제공하며 cpp가 호출될 때 __STDC__ 매크로가 정의되지 않습니다.
  • -Xt (전환): ISO C에 필요한 의미 체계 변경 없이 ISO C와 K&R C 호환성 확장을 제공합니다. 미리 정의된 매크로 __STDC__ cpp가 호출될 때 값 이 0 입니다.
-Y <symbol path> 확인할 dtrace 스크립트의 기호 검색 경로를 설정합니다. 여기서 기호 경로 는 기호가 포함된 공유 라이브러리 또는 디렉터리의 경로입니다. 자세한 내용은 기호 경로를 참조 하세요.
-Y dtrace 스크립트에 대한 기본 기호 검색 경로를 사용합니다.
Z- 디버깅을 위해 0개의 프로브와 일치하는 프로브 설명을 허용합니다.

다음 목록에서는 다시 기본 설명에 대해 설명합니다.

  • 조건자: 조건자는 슬래시(/ /)로 묶이고 변수, 상수 및 함수를 참조할 수 있는 부울 식인 D 식입니다. 조건자를 사용하여 이러한 이벤트를 기반으로 출력을 dtrace 필터링할 수 있습니다. 이 식은 프로브가 실행될 때마다 평가됩니다. 조건자가 true로 평가되면 연결된 작업이 실행됩니다.

  • 작업: 작업은 중괄호({ })로 묶이고 프로브가 실행될 때 실행되는 D 언어 문 집합이며 관련 조건자(있는 경우)가 true로 평가됩니다. 동작을 사용하여 출력 문을 인쇄하거나, 데이터를 기록하거나, 신호를 보내거나 변수를 수정하는 등의 다른 작업을 수행할 수 있습니다.

  • 모듈: 관련 프로브 집합을 포함하는 공급자의 구성 요소입니다. 스크립트에서 dtrace 모듈을 지정하여 스크립트 범위를 특정 모듈 또는 모듈 집합으로 제한할 수 있습니다.

  • Func: 프로브와 연결된 함수 이름입니다. 예를 들어 프로브는 syscall::NtReadFile 함수와 read 연결됩니다. 스크립트에서 dtrace 함수를 지정하여 스크립트 범위를 특정 함수 또는 함수 집합으로 제한할 수 있습니다.

  • 인수: 프로브가 실행될 때 작업 식에 전달되는 인수와 연결된 조건자(있는 경우)는 true로 평가됩니다. 인수는 함수 인수 또는 시스템 호출 반환 값의 값과 같은 프로브 컨텍스트에서 데이터를 캡처하는 데 사용할 수 있습니다. 인수를 사용하여 프로브 간에 데이터를 전달하거나 스크립트의 동작을 수정할 수도 있습니다.

예제

모든 시스템 호출을 추적하려면 실행 파일의 이름과 수행 중인 시스템 호출의 이름을 인쇄하고 다음을 실행합니다.

dtrace -n 'syscall:::entry { printf("%s called syscall %s", execname, probefunc); }'

이 명령은 지정된 PID를 사용하여 프로세스에서 "function_name" 함수를 추적하고 함수 이름, 함수를 호출하는 프로세스의 PID 및 실행 파일의 이름을 출력합니다.

dtrace -n 'pid$target::function_name:entry { printf("Function %s called by process %d (%s)", probefunc, pid, execname); }' -p <PID>

사용에 dtrace대한 추가 예제는 DTrace 시작 - 한 줄 명령을 참조 하세요.

참고 항목