我正在尝试从OS X 10.8中的终端执行以下非常简单的DTrace使用。
sudo dtrace -n 'syscall:::entry { @counts["System Call Entry"] = count(); }'
当我点击^ C时,我希望打印出聚合@counts
,但我只是打印出一个空行。有人可以告诉我为什么没有打印聚合物?
这真的很奇怪,因为如果我执行以下脚本,我会看到聚合的打印输出,因此聚合确实存储了值。
sudo dtrace -n 'syscall:::entry { @counts[probefunc] = count(); } tick-1sec { printa(@counts); exit(0); }'
答案 0 :(得分:0)
您必须让探针运行稍微长一点才能设置并收集一些数字。我发现实际启动/收集需要1到10秒,然后才能在点击^ C后得到打印的聚合结果。
这种延迟在OSX和Solaris上很明显,但为什么我不能确定它需要更长的时间。 [当然有一个完全合乎逻辑(和未知)的理由。]
另外,如果你添加:
dtrace:::BEGIN { printf("Starting...\n"); }
进入你的探针,你会看到延迟开始。但是,收集第一组数字需要花费更多的时间。在syscall ::: entry探测器触发并累积某些内容之前,它不会打印“聚合”。