查看聚合结果时,您通常只需关心最前面的几个结果。无需关注与最高值之外的任何其他对象关联的关键字和值。您可能还希望废弃整个聚合结果,从而删除关键字和值。DTrace trunc() 函数适用于这两种情况。
trunc() 的参数包括聚合和可选截断值。如果没有截断值,trunc() 将同时废弃整个聚合的聚合值和聚合关键字。如果存在截断值 n,则 trunc() 将废弃聚合值和聚合关键字,但与最高 n 个值关联的值和关键字除外。即,trunc(@foo, 10)将截断前 10 个值之后的名为 foo 的聚合,其中 trunc(@foo) 将废弃整个聚合。如果将 0 指定为截断值,将会废弃整个聚合。
要查看后 n 个值(而不是前 n 个值),请为 trunc() 指定负的截断值。例如,trunc(@foo, -10) 将截断后 10 个值之前的名为 foo 的聚合。
以下示例增加了系统调用示例,以便仅显示 10 秒内最前面 10 个系统调用应用程序的每秒系统调用速率。
#pragma D option quiet BEGIN { last = timestamp; } syscall:::entry { @func[execname] = count(); } tick-10sec { trunc(@func, 10); normalize(@func, (timestamp - last) / 1000000000); printa(@func); clear(@func); last = timestamp; }
以下示例显示在轻负荷膝上型计算机上运行以上脚本的输出:
FvwmAuto 7 telnet 13 ping 14 dtrace 27 xclock 34 MozillaFirebird- 63 xterm 133 fvwm2 146 acroread 168 Xsun 616 telnet 4 FvwmAuto 5 ping 14 dtrace 27 xclock 35 fvwm2 69 xterm 70 acroread 164 MozillaFirebird- 491 Xsun 1287 |