我正在尝试从OSX10.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); }'
发布于 2013-02-13 06:43:12
您必须让探测器运行更长一点的,以便它能够设置和收集一些数字。我发现实际启动/收集需要1到10秒的时间,只有这样,您才能在点击^C后打印出聚合结果。
这种延迟在OSX和Solaris上很明显,但是为什么它需要更长的时间,我还不能确定。当然,这有一个完美的逻辑(和未知的)原因。
另外,如果您添加:
dtrace:::BEGIN { printf("Starting...\n"); }进入你的探测器,你会看到延迟的启动。然而,收集第一组数字需要更多的时间。只有在syscall:entry探测器触发并累积了一些内容之后,它才会打印“聚合”。
https://stackoverflow.com/questions/13700900
复制相似问题