1.7 动态跟踪
动态跟踪技术把所有的软件变得可以监控,而且能用在真实的生产环境中。这项技术利用内存中的CPU 指令并在这些指令之上动态构建监测数据。这样从任何运行的软件中都可以获得定制化的性能统计数据,从而提供了远超系统的自带统计所能给予的观测性。从前因为不易观测而无法处理的问题变得可以解决。从前可以解决而难以解决的问题,现在也往往可以得以简化。
动态跟踪与传统的观测方法相比是如此不同,甚至让人很难一开始就抓住动态跟踪的要领。以操作系统内核举例:分析内核好比闯进了一间黑屋,拿着蜡烛(系统自带统计)去照亮内核工程师他们觉得需要照亮的地方,而动态跟踪则像是手电筒,你可以指哪儿亮哪儿。
DTrace 是第一个适用于生产环境的动态跟踪工具,它提供了许多其他的功能,甚至包括一套自用的编程语言,D 语言。DTrace 是由Sun Microsystems 公司开发,在2005年随着Solaris 10操作系统一同发布的。它是第一个开源的Solaris 组件,在此之后还移植到了Mac OS X 和FreeBSD 上,针对 Linux 的移植现在还在进行中。
在DTrace 之前,系统跟踪(system tracing)常常使用静态探针(static probes):置于内核和其他软件之上的一小套监测点。这种方法的观测是有限的,一般用起来很费时,需要配置、跟踪、导出数据以及最后分析一整套流程。
DTrace 对用户态和内核态的软件都提供了静态跟踪和动态跟踪,并且数据是实时产生的。下面的例子跟踪了ssh 登录的进程执行过程。这次跟踪是系统级别的(不是简单地与一个指定进程ID 相关联)。
在这个示例中,DTrace 被要求打印出时间戳(纳秒)、进程名和参数。用D 语言可以写出更多复杂的脚本,这让我们可以创建并定制对延时的测量。
DTrace 和动态跟踪将在第4章中讲解。在后续各章里也会有许多基于Linux 和Solaris 系统的DTrace 命令和脚本。另有一本讲解DTrace 更高阶应用的书[Gregg 11]。