{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = DTrace
| screenshot             = DTrace on Windows v10.0.19041.1 1115x966.png
| developer              = [[썬 마이크로시스템즈]]
| released               = 2005년 1월
| operating system       = [[솔라리스 (운영 체제)|솔라리스]], [[macOS]], [[FreeBSD]], [[NetBSD]], [[리눅스]]<ref>{{웹 인용|url=http://blogs.oracle.com/wim/entry/trying_out_dtrace |title=Trying out dtrace |website=oracle.com}}</ref>
| genre                  = [[트레이싱|Tracing]]
| license                = [[공동 개발 및 배포 허가서|CDDL]]
| status                 = 개발 중
| website                = {{URL|http://dtrace.org/}}
}}

'''DTrace'''는 운영 시스템의 [[커널 (컴퓨팅)|커널]]과 응용 프로그램 문제를 실시간으로 [[트러블슈팅|해결]]하기 위해 [[썬 마이크로시스템즈]]가 개발한 동적 [[트레이싱]] 프레임워크이다. 원래 [[솔라리스 (운영 체제)|솔라리스]]용으로 개발되었다가, 그 이후로 자유 [[공동 개발 및 배포 허가서]](CDDL)로 출시되면서 다른 여러 [[유닉스 계열]] 운영 체제로 이식되었다.

DTrace는 메모리의 양, CPU 시간, 또 실행 중인 프로세스들이 사용하는 파일 시스템 및 네트워크 자원 등, 실행 중인 시스템의 전반적인 개요를 가져오는데 사용할 수 있다. 특정 함수가 호출된 인수의 로그라든지 특정 파일에 접근하는 프로세스의 목록과 같은 훨씬 더 자세한 정보를 제공할 수 있다.

2011년 10월 기준으로, 오라클은 DTrace를 [[리눅스]]로 [[이식 (컴퓨팅)|이식]]하는 것을 발표하였으나 2014년 10월 13일 기준으로 공식적으로 이용이 불가능한 상황이다.<ref>http://www.slideshare.net/brendangregg/from-dtrace-to-linux Published on Oct 13, 2014 (slide 28)</ref> DTrace의 비공식 리눅스 포트는 이용할 수 있으나, 라이선스 조항에 대한 변경사항은 없다<!-- "The original DTrace is licensed under Sun's (now Oracle) CDDL license. Original copyrights are left intact. No GPL code is incorporated into the release, to avoid legal conflicts."-->.<ref>https://github.com/dtrace4linux/linux</ref>

== 명령 줄 예 ==
하나 이상의 프로브(probe)와 액션(action)을 인수로 지정하여 DTrace 스크립트를 명령 줄에서 직접 호출할 수 있다. 일부 예는 다음과 같다:

<syntaxhighlight lang="bash">
# New processes with arguments
dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }'

# Files opened by process
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'

# Syscall count by program
dtrace -n 'syscall:::entry { @num[execname] = count(); }'

# Syscall count by syscall
dtrace -n 'syscall:::entry { @num[probefunc] = count(); }'

# Syscall count by process
dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }'

# Disk size by process
dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }'

# Pages paged in by process
dtrace -n 'vminfo:::pgpgin { @pg[execname] = sum(arg0); }'
</syntaxhighlight>

수백 줄의 길이로 스크립트의 작성이 가능하지만 일반적으로 고급 문제 해결 및 분석에는 수십 줄이 필요하다. 200개 이상의 오픈 소스 DTrace 스크립트의 예제를 DTraceToolkit에서 볼 수 있으며,<ref>{{웹 인용
  | url = http://www.brendangregg.com/dtracetoolkit.html
  | title = DTraceToolkit
  | publisher = [[:en:Brendan Gregg]]
  | accessdate=2014-06-08
}}</ref> 이는 DTrace 책의 저자 Brendan Gregg가 만든 것으로<ref>{{웹 인용
  | url = http://my.safaribooksonline.com/book/operating-systems-and-server-administration/solaris/9780137061839
  | title = DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
  | publisher = [[Safari Books]]
  | accessdate = 2011-01-03
  | archive-date = 2011-04-06
  | archive-url = https://web.archive.org/web/20110406173133/http://my.safaribooksonline.com/book/operating-systems-and-server-administration/solaris/9780137061839
  }}</ref>), 문서와 각각의 증명 결과도 제공한다.

== 같이 보기 ==
* [[ftrace]]
* [[ktrace]]
* [[Ltrace]]
* [[Strace]]
* [[SystemTap]]
* [[Sysdig]]
* [[LTTng]]
* IBM [[ProbeVue]]

== 각주 ==
* {{저널 인용
 |author       = Bryan Cantrill
 |date         = February 2006
 |title        = Hidden in Plain Sight
 |journal      = [[:en:ACM Queue]]
 |volume       = 4
 |issue        = 1
 |pages        = 26–36
 |doi          = 10.1145/1117389.1117401
 |url          = http://www.acmqueue.org/modules.php?name=Content&pa=showpage&pid=361
 |accessdate   = 2006-09-08
 |보존url    = https://web.archive.org/web/20061002073557/http://www.acmqueue.org/modules.php?name=Content&pa=showpage&pid=361
 |보존날짜 = 2006-10-02
 |url-status = dead
}}
* {{콘퍼런스 인용
 |     author = Bryan M. Cantrill, Michael W. Shapiro and Adam H. Leventhal
 |date=June 2004
 |      title = Dynamic Instrumentation of Production Systems
 | conference = Proceedings of the 2004 [[:en:USENIX]] Annual Technical Conference
 | url = http://www.usenix.org/event/usenix04/tech/general/full_papers/cantrill/cantrill_html/
 | accessdate = 2006-09-08
 }}

=== 내용주 ===
{{각주|30em}}

== 외부 링크 ==
* [http://www.brendangregg.com/dtrace.html DTrace Tools]{{snd}} Brendan Gregg's DTrace examples (2004)
* [https://wiki.freebsd.org/DTrace FreeBSD DTrace page]{{snd}} FreeBSD DTrace homepage, includes a tutorial and one-liners
* [http://www.dtracebook.com/index.php/Main_Page DTrace book] {{웹아카이브|url=https://archive.today/20131107211538/http://www.dtracebook.com/index.php/Main_Page |날짜=2013-11-07 }}{{snd}} includes hundreds of example scripts
* [http://myaut.github.io/dtrace-stap-book Dynamic Tracing with DTrace & SystemTap]{{snd}} free book with examples and exercises
* [https://github.com/brendangregg/DTrace-book-scripts DTrace book scripts]{{snd}} DTrace book scripts on GitHub
* [http://www.brendangregg.com/dtracetoolkit.html DTraceToolkit]{{snd}} a collection of DTrace scripts
* [http://dtracehol.com/ DTrace Hands On Lab]{{snd}} a step-by-step course to learn DTrace
* [http://developers.sun.com/sunstudio/documentation/tutorials/dlight/ DLight Tutorial]{{snd}} an interactive GUI utility for C/C++ developers based on DTrace technology from the [[:en:Sun Studio (software)|Oracle Solaris Studio]]
* [https://web.archive.org/web/20170903114855/http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html Exploring Leopard with DTrace]{{snd}} DTrace for debugging and exploration
* [https://www.youtube.com/watch?v=TgmA48fILq8|Google Tech Talk on DTrace given by Bryan Cantrill]
* [http://queue.acm.org/detail.cfm?id=1117401 Hidden in Plain Sight], Sun Microsystems, by Bryan Cantrill

{{솔라리스}}
{{기본정렬:Dtrace}}

[[분류:자유 시스템 소프트웨어]]
[[분류:디버거]]
[[분류:관점 지향 프로그래밍]]
[[분류:리눅스 커널 특징]]
[[분류:썬 마이크로시스템즈 소프트웨어]]
[[분류:명령줄 소프트웨어]]