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> |
전처리기를 호출할 때 기호를 정의합니다. 여기서 name은 정의할 기호의 이름이고 def는 기호에 할당할 선택적 값입니다. |
-e | 요청을 컴파일한 후 프로브를 사용하도록 설정하기 전에 종료됩니다. |
f- | 지정된 함수 이름과 일치하는 프로브를 사용하거나 나열합니다. |
-F | 추적 출력을 함수별로 결합하여 분석하기 쉽게 합니다. |
-H | 정적 프로브에 대한 정의가 있는 헤더 파일을 생성합니다. |
-i <probe-id> |
probe-id가 추적할 프로브의 식별자인 지정된 프로브 ID와 일치하는 프로브를 사용하거나 나열합니다. |
-I <path> |
지정된 디렉터리를 전처리기 검색 경로에 추가합니다. 여기서 path는 #include 파일이 포함된 추가하려는 디렉터리입니다. |
-l | -P, -m, -f, -n, -i 및 -s 매개 변수를 기준으로 지정된 조건과 일치하는 프로브를 나열합니다. 이러한 매개 변수를 지정하지 않으면 모든 프로브가 나열됩니다. |
-L <path> |
지정된 디렉터리를 라이브러리 검색 경로에 추가합니다. 여기서 path는 공통 정의가 포함된 추가하려는 라이브러리 디렉터리입니다. |
-m | provider:module 또는 module 형식을 사용하여 인수에서 지정된 모듈 이름과 일치하는 프로브를 사용하거나 나열합니다. 모듈 이름 외에 한정자를 지정하지 않으면 해당 모듈 이름을 가진 모든 프로브가 일치합니다. |
-n | provider:module:function:name, module:function:name, function:name 또는 name 형식을 사용하여 인수의 지정된 프로브 이름과 일치하는 프로브를 사용하도록 설정하거나 나열합니다. 프로브 이름 외에 한정자를 지정하지 않으면 해당 이름을 가진 모든 프로브가 일치합니다. |
-o <output> |
추적 데이터의 출력 파일을 설정합니다. 여기서 output은 추적 데이터에 사용할 파일의 이름입니다. |
-p <pid> |
지정된 PID(프로세스 ID)를 가져오고 해당 기호 테이블을 캐시합니다. 이 테이블은 프로그램의 동작을 분석하는 데 사용할 수 있습니다. |
-P <provider> |
provider가 공급자의 이름인 지정된 공급자 이름과 일치하는 프로브를 사용하거나 나열합니다. -P 매개 변수의 인스턴스를 두 개 이상 동시에 사용할 수 있습니다. |
-Q | 명시적으로 추적된 데이터만 출력하는 자동 모드를 설정합니다. |
-s <script> |
지정된 D 스크립트에 따라 프로브를 사용하거나 나열합니다. 여기서 script는 실행하려는 스크립트의 이름입니다. -e를 지정하면 프로그램이 컴파일되지만 데이터 수집은 수행되지 않습니다. -l을 지정하면 프로그램이 컴파일되고 일치하는 프로브 목록이 표시되지만 데이터 수집은 수행되지 않습니다. -e 또는 -l을 지정하지 않으면 프로그램이 컴파일되고 지정된 프로브에 따라 데이터 수집이 수행되고 추적이 시작됩니다. |
S- | stderr로 디버깅하기 위한 D-언어 컴파일러 중간 코드를 인쇄합니다. |
-U <name> |
전처리기를 호출할 때 기호를 정의 해제합니다. 여기서 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 표준을 준수하는 방법을 제어합니다. 사용할 수 있는 인수는 다음과 같습니다.
|
-y <symbol path> |
확인할 dtrace 스크립트의 기호 검색 경로를 설정합니다. 여기서 symbol path는 기호가 포함된 공유 라이브러리 또는 디렉터리의 경로입니다. 자세한 내용은 기호 경로를 참조하세요. |
-Y | dtrace 스크립트에 대한 기본 기호 검색 경로를 사용합니다. |
Z- | 디버깅을 위해 0개의 프로브와 일치하는 프로브 설명을 허용합니다. |
다음 목록에서는 나머지를 설명합니다.
Predicate: 조건자는 슬래시(
/ /
)로 묶이고 변수, 상수 및 함수를 참조할 수 있는 부울 식인 D 식입니다. 조건자를 사용하여 이러한 이벤트를 기반으로dtrace
의 출력을 필터링할 수 있습니다. 이 식은 프로브가 실행될 때마다 평가됩니다. 조건자가 true로 평가되면 연결된 작업이 실행됩니다.Action: 작업은 중괄호(
{ }
)로 묶이고 프로브가 실행될 때 실행되는 D 언어 문 집합이며 관련 조건자(있는 경우)가 true로 평가됩니다. 동작을 사용하여 출력 문을 인쇄하거나, 데이터를 기록하거나, 신호를 보내거나 변수를 수정하는 등의 다른 작업을 수행할 수 있습니다.Module: 관련 프로브 집합을 포함하는 공급자의 구성 요소입니다.
dtrace
스크립트에서 모듈을 지정하여 스크립트 범위를 특정 모듈 또는 모듈 집합으로 제한할 수 있습니다.Func: 프로브와 연결된 함수 이름입니다. 예를 들어
syscall::NtReadFile
프로브는read
함수와 연결됩니다.dtrace
스크립트에서 함수를 지정하여 스크립트 범위를 특정 함수 또는 함수 집합으로 제한할 수 있습니다.Args: 프로브가 실행될 때 작업 식에 전달되는 인수와 연결된 조건자(있는 경우)는 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 - 한 줄 명령 시작을 참조하세요.