DTrace
2024-04-10 13:04:05 阿炯

DTrace是一个系统级的综合动态跟踪框架,最初由Sun Microsystems于2005年创建,用于实时排除生产系统上的 内核和应用程序问题。它最初是为Solaris开发的,后来在OpenSolaris及其后代illumos中根据免费的通用开发和分发许可证(CDDL)发布,并已移植到其他几个类 Unix系统。采用C语言编写开发。


DTrace可用于获取正在运行的系统的全局概览,例如活动进程使用的内存量、CPU时间、文件系统和网络资源。它还可以提供更细粒度的信息,例如调用特定函数的参数日志,或访问特定文件的进程列表。


2010 年,Oracle 公司收购了 Sun Microsystems,并宣布终止 OpenSolaris。作为一些核心 Solaris 工程师为创建真正的开源 Solaris 所做的社区努力,illumos 操作系统于 2010 年 8 月通过网络研讨会宣布支持作为 OpenSolaris OS/Net 整合的一个分支,包括 DTrace 技术。

2011 年 10 月,Oracle 宣布将DTrace移植到Linux,并于 2019 年在GitHub上提供了适用于 Fedora 的官方 DTrace。多年来,Linux 上的非官方 DTrace 移植一直可用,许可条款没有任何变化。

2016 年 9 月,OpenDTrace 工作在GitHub上开始提供包括系统内部的代码和全面文档。其维护了 OpenSolaris 代码的原始 CDDL 许可,并根据BSD 2 Clause许可提供了额外的代码贡献。OpenDTrace 的目标是提供一种与操作系统无关的、可移植的 DTrace 实现,让所有消费者都能接受,包括 macOS、*BSD 和 Linux 以及嵌入式系统。

2017 年 8 月,Oracle 在GPLv2+许可下发布了 DTrace 内核代码,并在 GPLv2 和UPL许可下发布了用户空间代码。

DTrace on Windows

2018 年 9 月,微软宣布他们已将 DTrace 从FreeBSD移植到 Windows,2019 年 3 月,Microsoft 发布了适用于 Windows 10 内部版本的 DTrace 版本。


通过支持的语言提供程序,DTrace可以检索代码的上下文,包括函数、源文件和行号位置。此外,如果语言支持,则可以使用动态内存分配和垃圾收集。支持的语言提供程序包括汇编语言、C、C++、Java、Erlang、JavaScript、Perl、PHP、Python、Ruby、Shell 脚本和Tcl。应用程序提供程序允许 DTrace 通过系统调用跟踪应用程序的操作并进入内核。提供 DTrace 应用程序提供程序的应用程序包括MySQL、PostgreSQL、Oracle Database、Oracle Grid Engine和Firefox。

使用参考

DTrace Tools

DTrace by Example

使用 Dtrace 和 XPerf 监视 Windows 系统调用

命令行示例

可以直接从命令行调用 DTrace 脚本,提供一个或多个探测和操作作为参数,一些例子如下:

# 带参数的新进程
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(); }'

# 通过 syscall 计算系统调用计数
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); }'

还可以编写长度可达数百行的脚本,尽管高级故障排除和分析通常只需要数十行。

作者

是由Bryan Cantrill、Mike Shapiro和Adam Leventhal设计和实现的。2005 年,作者因 DTrace 的创新而获得了InfoWorld和Technology Review 的认可。DTrace 在《华尔街日报》 2006 年技术创新奖竞赛中荣获最高奖。作者于 2008 年获得USENIX颁发的软件工具用户组 (STUG) 奖。


最新版本:2
2.0.0-1.14 于2024年4月上旬发布,新版本基于 BPF 和其他 Linux 内核跟踪功能,完全作为用户空间应用程序实现。它可用于在任何提供基于 BPF 的跟踪和 BTF 类型数据的 Linux 内核上进行跟踪。其可以用于任何提供 BPF 跟踪和 BTF 类型数据的 Linux 内核。此外,v2.0.0-1.14 的功能接近于与 Linux 内核模块版本的 DTrace for Linux(版本 1.2.1-1)相比,功能已经完整。开发仍在以增量方式进行,以利用现有内核功能提供 DTrace 的完整功能集。

这意味着 DTrace 2.0.0-1.14 为 Linux 系统提供了更强大的跟踪和诊断功能,使得开发人员能够更好地了解系统的运行情况。

官方主页:https://dtrace.org/