跳过导航链接 | |
退出打印视图 | |
DTrace 用户指南 Oracle Solaris 10 8/11 Information Library (简体中文) |
对于与性能有关的问题,聚合的数据通常比离散的数据点更为有用。DTrace 提供了几个内置的聚合函数。如果某个聚合函数先应用于某个数据集合的各个子集,然后再应用于这些子集的分析结果,这样所得到的结果与该聚合函数应用于作为一个整体的集合所返回的结果相同。
DTrace 工具为聚合存储数目不断变化的数据条目。聚合函数仅存储当前的中间结果和函数所应用于的新元素。中间结果是基于每个 CPU 分别分配的。因为该分配方案不需要锁,所以其实现本质上是可伸缩的。
DTrace 聚合采用下面的一般形式:
@name[ keys ] = aggfunc( args );
在此一般形式中,变量的定义如下所述:
聚合的名称,以 @ 字符作为前缀。
以逗号分隔的 D 表达式列表。
某个 DTrace 聚合函数。
适用于聚合函数的参数的逗号分隔列表。
表 2-1 DTrace 聚合函数
|
示例 2-14 使用聚合函数
本示例使用 count 聚合函数来对每个进程的write(2) 系统调用进行计数。在 dtrace 命令终止之前,该聚合函数不输出任何数据。输出数据提供在 dtrace 命令处于活动状态期间收集的数据的汇总。
# cat writes.d #!/usr/sbin/dtrace -s syscall::write:entry] { @numWrites[execname] = count(); } # ./writes.d dtrace: script 'writes.d' matched 1 probe ^C dtrace 1 date 1 bash 3 grep 20 file 197 ls 201