DTrace
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
DTrace는 썬 마이크로시스템즈가 개발한 동적 추적 프레임워크로, 사용자가 애플리케이션과 운영 체제를 조정하고 문제 해결을 할 수 있도록 운영 통찰력을 제공한다. DTrace는 D 프로그래밍 언어를 사용하여 작성된 추적 프로그램(스크립트)을 통해 작동하며, 프로브를 사용하여 특정 조건 발생 시 작업을 실행한다. 솔라리스 10에 처음 포함되었으며, FreeBSD, NetBSD, macOS, 리눅스, 윈도우 등 다양한 운영 체제에서 지원된다. MySQL, PostgreSQL, 오라클 데이터베이스 등 여러 애플리케이션에서도 DTrace를 지원한다. 브라이언 캔트릴, 마이크 샤피로, 아담 레벤탈이 개발했으며, 여러 기술 혁신 상을 수상했다.
더 읽어볼만한 페이지
- 관점 지향 프로그래밍 - Nemerle
Nemerle은 객체 지향 및 함수형 프로그래밍 스타일을 혼합하여 사용할 수 있는 프로그래밍 언어이며, 강력한 형식 추론, 메타프로그래밍 시스템, 다양한 프로그래밍 스타일 지원, .NET 플랫폼 라이브러리 접근 용이성 등의 특징을 갖는다. - 관점 지향 프로그래밍 - 스프링 프레임워크
스프링 프레임워크는 로드 존슨의 코드에서 시작된 자바 플랫폼용 오픈 소스 애플리케이션 프레임워크로, IoC 컨테이너와 AOP 등의 핵심 기능과 다양한 모듈 및 템플릿을 통해 엔터프라이즈 자바 개발의 생산성을 향상시키고 확장성을 제공하며 웹 개발, 보안, 데이터 접근 등 다양한 기능을 지원한다. - 디버거 - Valgrind
Valgrind는 동적 분석 도구들의 프레임워크로, 가상 머신 기반으로 작동하며 메모리 오류 감지, 멀티스레드 코드 분석 등 다양한 기능을 제공하지만, 정적 또는 스택 할당 데이터의 경계 오류는 모두 감지하지 못한다. - 디버거 - Eclipse (소프트웨어)
이클립스는 IBM에서 개발한 자바 기반의 통합 개발 환경으로, OSGi 서비스 플랫폼을 런타임 아키텍처로 사용하며, 플러그인을 통해 기능을 확장할 수 있고, 이클립스 퍼블릭 라이선스를 따르며, 한국어를 지원한다. - 명령줄 소프트웨어 - 어드밴스트 패키징 툴
어드밴스트 패키징 툴(APT)은 데비안 계열 리눅스 배포판에서 패키지를 관리하는 도구 모음으로, 패키지 설치, 삭제, 업데이트, 업그레이드 기능을 제공하며, 특히 패키지 간 의존성을 자동 관리하는 특징을 가진다. - 명령줄 소프트웨어 - FFmpeg
FFmpeg은 오디오 및 비디오 데이터를 다루는 자유 소프트웨어 프로젝트로, 다양한 코덱과 형식을 지원하며 멀티미디어 응용 프로그램에 활용되고 2011년 Libav로 포크되기도 했으나 통합 과정을 거쳤다.
| DTrace - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 일반 정보 | |
| 이름 | DTrace |
| 종류 | 동적 추적 프레임워크 |
| 개발자 | 선 마이크로시스템즈, 오라클, 마이크로소프트 |
| 발표일 | 2005년 1월 |
| 저장소 | GitHub 저장소 |
| 운영 체제 | 솔라리스, illumos, macOS, FreeBSD, NetBSD, 리눅스, 윈도우 |
| 프로그래밍 언어 | C |
| 장르 | 추적 |
| 라이선스 | CDDL, GPLv2, UPL |
| 웹사이트 | DTrace 공식 웹사이트 |
2. 설명
썬 마이크로시스템즈는 사용자가 애플리케이션과 운영체제(OS) 자체를 튜닝하고 문제를 해결할 수 있도록 운영 통찰력을 제공하기 위해 DTrace를 설계했다.
DTrace 스크립트는 하나 이상의 프로브(probe)와 액션(action)을 인수로 지정하여 명령 줄에서 직접 호출할 수 있다.
테스터는 D 프로그래밍 언어 (다른 "D"라는 이름을 가진 프로그래밍 언어와 혼동하지 않도록 주의)를 사용하여 추적 프로그램(스크립트라고도 함)을 작성한다. C에서 영감을 얻은 이 언어에는 추적에 특화된 함수와 변수가 추가되었다. D 프로그램은 구조적으로 AWK 프로그램과 유사하며, 하나 이상의 ''프로브''(계측 지점) 목록으로 구성되고 각 프로브는 작업과 연결된다. 이러한 프로브는 관점 지향 프로그래밍의 포인트컷과 유사하다. 프로브에 대한 조건이 충족될 때마다 관련 작업이 실행된다 (프로브가 "실행"된다). 일반적인 프로브는 특정 파일이 열리거나, 프로세스가 시작되거나, 특정 코드 줄이 실행될 때 실행될 수 있다. 실행되는 프로브는 콜 스택과 컨텍스트 변수에 접근하고 식을 평가하여 런타임 상황을 분석할 수 있으며, 일부 정보를 출력하거나 기록하고 데이터베이스에 기록하거나 컨텍스트 변수를 수정할 수 있다. 컨텍스트 변수를 읽고 쓰는 기능을 통해 프로브가 서로 정보를 전달하여 서로 협력하여 다른 이벤트 간의 상관 관계를 분석할 수 있다.
DTrace를 운영 환경에서 안전하게 사용할 수 있도록 특별한 고려가 이루어졌다. 예를 들어, 추적을 수행할 때 프로브 효과가 최소화되고 비활성화된 프로브와 관련된 성능 영향이 없다. 활성화할 수 있는 수만 개의 DTrace 프로브가 있기 때문에 이는 중요하다. 새로운 프로브도 동적으로 생성할 수 있다.[39][40][31][32][33][34][35]
3. 명령 줄 예
스크립트는 수백 줄 길이로도 작성할 수 있지만, 고급 문제 해결 및 분석에는 보통 수십 줄 정도만 필요하다. Brendan Gregg(DTrace 책[40]의 저자)가 만든 DTraceToolkit에서 200개 이상의 오픈 소스 DTrace 스크립트 예제를 찾을 수 있으며, 각 스크립트에 대한 문서와 데모도 제공한다.[39]
3. 1. 예시
DTrace 스크립트는 하나 이상의 프로브(probe)와 액션(action)을 인수로 지정하여 명령 줄에서 직접 호출할 수 있다. 다음은 그 예시이다.
| 설명 | 명령어 |
|---|---|
| 인수가 있는 새로운 프로세스 | `dtrace -n proc:::exec-success { trace(curpsinfo->pr_psargs); }` |
| 프로세스에서 연 파일 | `dtrace -n syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }` |
| 프로그램별 시스템 호출 횟수 | `dtrace -n syscall:::entry { @num[execname] = count(); }` |
| 시스템 호출별 시스템 호출 횟수 | `dtrace -n syscall:::entry { @num[probefunc] = count(); }` |
| 프로세스별 시스템 호출 횟수 | `dtrace -n syscall:::entry { @num[pid,execname] = count(); }` |
| 프로세스별 디스크 크기 | `dtrace -n io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }` |
| 프로세스별 페이지 인 | `dtrace -n vminfo:::pgpgin { @pg[execname] = sum(arg0); }` |
스크립트는 수백 줄 길이로도 작성할 수 있지만, 고급 문제 해결 및 분석에는 보통 수십 줄 정도만 필요하다. Brendan Gregg(DTrace 책의 저자[40])가 만든 DTraceToolkit에서 200개 이상의 오픈 소스 DTrace 스크립트 예제를 찾을 수 있으며, 각 스크립트에 대한 문서와 데모도 제공한다.[39]
4. 지원 플랫폼
DTrace는 2003년 11월에 처음 사용 가능하게 되었으며, 2005년 1월 Sun의 솔라리스 10의 일부로 정식 출시되었다.[9] DTrace는 OpenSolaris 프로젝트 구성 요소 중 CDDL 하에 소스 코드가 공개된 최초의 구성 요소였다.
DTrace는 illumos 및 관련 배포판의 필수적인 부분이다. 또한 FreeBSD[9]와 NetBSD의 표준 부분이기도 하다.[10]
애플은 Mac OS X 10.5 "Leopard"에 DTrace 지원을 추가했으며, Instruments라는 GUI를 포함시켰다.[11] /usr/bin에는 DTraceToolkit의 40개 이상의 DTrace 스크립트가 포함되어 있으며,[12] 디스크 I/O (iosnoop) 및 프로세스 실행 (execsnoop)을 검사하는 도구가 포함되어 있다. DTrace가 지원되는 다른 플랫폼과 달리, Mac OS X에는 프로그램이 설정할 수 있는 플래그 (P_LNOATTACH)가 있어 DTrace 및 gdb와 같은 디버깅 유틸리티가 해당 프로세스를 추적하는 것을 허용하지 않는다. 최초의 Mac OS X DTrace 구현에서 이 플래그가 설정된 프로그램이 실행되는 동안 실행되어야 하는 관련 없는 프로브가 실행되지 않아 다른 시스템 정보 추적에 영향을 미칠 수 있었다.[13] OS X 10.5.3 업데이트는 몇 달 후에 이 문제를 해결했다.[14] 그러나 El Capitan 이후부터 System Integrity Protection은 기본적으로 사용자가 보호된 바이너리를 DTrace하는 것을 방지한다.
리눅스용 DTrace는 2008년부터 사용 가능하게 되었으며;[15] 문제 개선 및 해결을 위한 작업이 활발히 진행 중이다. 또한 [https://github.com/dtrace4linux/linux github에 활발한 구현]이 있다. 표준 코어 제공자(fbt, syscall, profile)와 특별한 "instr" 제공자가 제공된다 (일부 솔라리스 제공자는 현재 사용할 수 없다). 리눅스 DTrace 구현은 로드 가능한 커널 모듈이므로 커널 자체를 수정할 필요가 없어 DTrace가 CDDL 대 GPL 라이선스 충돌을 (최소한 소스 형태로) 피할 수 있다. 그러나 DTrace가 로드되면 커널 인스턴스는 오염됨으로 표시된다.
2007년, QNX Software Systems의 한 개발자는 자신의 블로그에서 자신과 동료가 DTrace를 QNX 운영 체제에 통합하는 작업을 진행하고 있다고 발표했다.[16]
오라클은 2011년 오라클 리눅스에 대한 베타 DTrace 지원을 추가했으며,[1] Unbreakable Enterprise Kernel 릴리스 2에서 기술 미리 보기로 제공되었고, 이는 GPLv2 하에 있다 (DTrace 리눅스 커널 모듈은 원래 CDDL 하에 출시되었다).[17] 일반 사용 가능성은 2012년 12월에 발표되었다.[18][19]
2019년 3월 11일, 마이크로소프트는 Windows 10 insider 빌드용 DTrace 버전을 출시했다.[20] 마이크로소프트는 Windows Server 2025에 DTrace를 내장 도구로 포함시켰다.[21][22]
5. 언어 및 애플리케이션 제공자
DTrace는 지원되는 ''언어 제공자''를 통해 함수, 소스 파일, 줄 번호 위치를 포함한 코드의 컨텍스트를 검색할 수 있다. 또한, 동적 메모리 할당 및 가비지 수집은 해당 언어에서 지원하는 경우 사용할 수 있다.[23] 지원되는 언어 제공자에는 어셈블리어, C, C++, 자바, 얼랭, 자바스크립트, Perl, PHP, 파이썬, 루비, 셸 스크립트, Tcl이 있다.
''애플리케이션 제공자''를 사용하면 DTrace가 시스템 호출을 통해 애플리케이션의 작동을 추적하여 커널까지 접근할 수 있다. DTrace 애플리케이션 제공자를 제공하는 애플리케이션에는 MySQL, PostgreSQL, 오라클 데이터베이스, 오라클 그리드 엔진, 파이어폭스가 있다.[23][24][25]
6. 개발자 및 수상 경력
DTrace는 브라이언 캔트릴, 마이크 샤피로, 아담 레벤탈이 설계 및 구현했다.
2005년 ''인포월드''(InfoWorld)와 ''테크놀로지 리뷰''(Technology Review)는 DTrace의 혁신적인 공로를 인정했다.[26][27] 2006년 DTrace는 ''월스트리트 저널''(The Wall Street Journal) 기술 혁신 어워드 경쟁에서 최고상을 수상했다.[28] 2008년 DTrace 개발자들은 USENIX로부터 소프트웨어 도구 사용자 그룹(STUG) 상을 받았다.[29]
참조
[1]
웹사이트
Trying out dtrace
http://blogs.oracle.[...]
2018-02-15
[2]
웹사이트
OS internals: Technical deep-dive into operating system innovations - BRK3365
https://www.youtube.[...]
2018-10-08
[3]
웹사이트
Illumos - Hope and Light Springs Anew - Presented by Garrett D'Amore
http://www.illumos.o[...]
illumos.org
2010-08-03
[4]
웹사이트
Oracle To Bring Dtrace To Linux
https://linux.slashd[...]
2020-11-11
[5]
문서
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.
https://github.com/d[...]
[6]
웹사이트
dtrace for linux; Oracle does the right thing
https://gnu.wildebee[...]
2018-02-14
[7]
웹사이트
DTraceToolkit
http://www.brendangr[...]
Brendan Gregg
2014-06-08
[8]
서적
DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
http://my.safaribook[...]
Safari Books
2011-01-03
[9]
웹사이트
FreeBSD 7.1-RELEASE Announcement
http://www.freebsd.o[...]
2009-01-06
[10]
웹사이트
NetBSD source changes, 21 February 2010
http://mail-index.ne[...]
[11]
웹사이트
Mac OS X Leopard - Developer Tools - Instruments
https://www.apple.co[...]
Apple Inc.
2007-10-19
[12]
웹사이트
Mac OS X DTrace
https://opensource.a[...]
Apple Inc.
2010-05-31
[13]
웹사이트
Mac OS X and the missing probes
http://dtrace.org/bl[...]
Leventhal, Adam H.
2008-01-20
[14]
웹사이트
Apple Updates DTrace
http://dtrace.org/bl[...]
Leventhal, Adam H.
2008-06-16
[15]
웹사이트
CRiSP tools download page.
http://www.crisp.dem[...]
2011-03-02
[16]
웹사이트
DTrace on QNX!
https://blogs.oracle[...]
2007-11-08
[17]
간행물
DTrace on Linux
https://events.linux[...]
2012-04-05
[18]
웹사이트
Announcement: DTrace for Oracle Linux General Availability
https://blogs.oracle[...]
2012-12-12
[19]
문서
DTrace module source code for Linux
https://oss.oracle.c[...]
[20]
웹사이트
DTrace on Windows
https://techcommunit[...]
2019-03-11
[21]
웹사이트
DTrace
https://learn.micros[...]
2024-11-07
[22]
웹사이트
Windows Server 2025 released—here are the new features
https://www.bleeping[...]
2024-11-07
[23]
서적
DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
Prentice Hall
[24]
웹사이트
Open Grid Scheduler / Grid Engine Documentation
http://gridscheduler[...]
Open Grid Scheduler
2012-12-30
[25]
웹사이트
DTrace – MDN
https://developer.mo[...]
Mozilla
2012-12-30
[26]
웹사이트
Tracing software in real time
http://www.technolog[...]
MIT
2007-03-31
[27]
웹사이트
Innovation is alive and well in 2005
http://www.infoworld[...]
IDG
2005-08
[28]
웹사이트
The Winners Are...
https://www.wsj.com/[...]
Dow Jones & Company, Inc.
2006-09
[29]
웹사이트
2008 USENIX Annual Technical Conference (USENIX '08)
http://www.usenix.or[...]
2008-11-26
[30]
웹사이트
DTrace Tools
http://www.brendangr[...]
2017-11-27
[31]
웹사이트
DTraceがシステムのボトルネックをスッキリ解決!〜エンジニアの苦しみが喜びに変わるとき〜
http://jp.sun.com/co[...]
2009-01-07
[32]
문서
D言語とは異なるスクリプト言語である。
[33]
웹사이트
Mac OS X Leopard - Technology - UNIX -
http://www.apple.com[...]
2009-01-07
[34]
웹사이트
FreeBSD 7.1-RELEASE Release Notes
http://www.freebsd.o[...]
2009-01-07
[35]
웹사이트
DTrace on Windows
https://techcommunit[...]
2019-03-14
[36]
웹인용
Trying out dtrace
http://blogs.oracle.[...]
[37]
Slideshare
from-dtrace-to-linux
http://www.slideshar[...]
2014-10-13
[38]
Github
https://github.com/d[...]
[39]
웹인용
DTraceToolkit
http://www.brendangr[...]
Brendan Gregg
2014-06-08
[40]
웹인용
DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
http://my.safaribook[...]
Safari Books
2011-01-03
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com