【问题标题】:DTrace not printing aggregationsDTrace 不打印聚合
【发布时间】:2012-12-04 10:32:37
【问题描述】:

我正在尝试从 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); }'

【问题讨论】:

    标签: aggregation output dtrace


    【解决方案1】:

    您必须让探测器运行稍微长一点,以便它设置和收集一些数字。我发现实际开始/收集需要 1 到 10 秒,然后才能在点击 ^C 后打印汇总结果。

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

    另外,如果你添加:

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

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

    【讨论】:

    • 让它运行几分钟仍然没有产生任何结果。我认为 OS X 版本中的行为可能已经改变,因为我在 Snow Leopard 上打印了 ^C
    • 有趣,我使用的是 OS X 10.7.5,它可以工作。如果添加“开始”部分(上图),会打印吗?
    • 是的,"Starting..." 打印,也许它只是 10.8 的东西。
    • 在 Mac OS X 10.8 上看到同样的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    相关资源
    最近更新 更多