使用 DTrace 生成简单监视脚本时,可使用 clear() 函数定期清除聚合中的值。此函数仅接受聚合作为其参数。clear() 函数仅清除聚合的值;聚合的关键字将保留。因此,如果聚合中的某个关键字的关联值为零,则表示该关键字具有非零值,但后来作为 clear() 的一部分被设置为零。要同时废弃聚合的值和关键字,请使用 trunc()。有关详细信息,请参见截断聚合。
以下示例将 clear() 添加到示例 9–1 中:
#pragma D option quiet BEGIN { last = timestamp; } syscall:::entry { @func[execname] = count(); } tick-10sec { normalize(@func, (timestamp - last) / 1000000000); printa(@func); clear(@func); last = timestamp; }
虽然示例 9–1 显示了 dtrace 调用的生命周期中系统调用的速率,但上面的示例仅显示了最近 10 秒内的系统调用速率。