0

我正在尝试从 OS X 10.8 的终端执行以下非常简单的 DTrace 使用。

sudo dtrace -n 'syscall:::entry { @counts["System Call Entry"] = count(); }'

当我点击 ^CI 时,期望打印出聚合@counts,但我只是打印出一个空白行。有人可以告诉我为什么没有打印聚合吗?

这真的很奇怪,因为如果我执行以下脚本,我确实会看到聚合的打印输出,因此聚合中确实存储了值。

sudo dtrace -n 'syscall:::entry { @counts[probefunc] = count(); } tick-1sec { printa(@counts); exit(0); }'

4

1 回答 1

0

您必须让探测器运行更长时间才能设置和收集一些数字。我发现实际开始/收集需要 1 到 10 秒,只有这样才能在点击 ^C 后打印汇总结果。

这种延迟在 OSX 和 Solaris 上很明显,但为什么有时需要更长的时间我无法确定。[当然有一个完全合乎逻辑(且未知)的原因。]

此外,如果您添加:

dtrace:::BEGIN { printf("Starting...\n"); }

进入您的探针,您会看到延迟启动。但是,收集第一组数字需要更多时间。在 syscall:::entry 探测器触发并积累一些东西之前,它不会打印“聚合”。

于 2013-02-12T22:43:12.300 回答