什么dtrace脚本输出的手段?

我正在跟踪我的restify.js应用程序中的DTrace探测器(将其重新定义为提供dtrace支持的node.js中的http服务器)。 我使用restify文档中的示例dtrace脚本:

#!/usr/sbin/dtrace -s #pragma D option quiet restify*:::route-start { track[arg2] = timestamp; } restify*:::handler-start /track[arg3]/ { h[arg3, copyinstr(arg2)] = timestamp; } restify*:::handler-done /track[arg3] && h[arg3, copyinstr(arg2)]/ { @[copyinstr(arg2)] = quantize((timestamp - h[arg3, copyinstr(arg2)]) / 1000000); h[arg3, copyinstr(arg2)] = 0; } restify*:::route-done /track[arg2]/ { @[copyinstr(arg1)] = quantize((timestamp - track[arg2]) / 1000000); track[arg2] = 0; } 

输出是:

  use_restifyRequestLogger value ------------- Distribution ------------- count -1 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 1 | 0 use_validate value ------------- Distribution ------------- count -1 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 1 | 0 pre value ------------- Distribution ------------- count 0 | 0 1 |@@@@@@@@@@@@@@@@@@@@ 1 2 |@@@@@@@@@@@@@@@@@@@@ 1 4 | 0 handler value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 512 | 0 route_user_read value ------------- Distribution ------------- count 128 | 0 256 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 512 | 0 

我想知道什么是value价值领域 – 这是什么意思? 为什么有124/256/512例如? 我想这意味着时间/持续时间,但它是在奇怪的格式 – 是否有可能显示以miliseconds为例?

输出是一个直方图 。 你正在得到一个直方图,因为你正在D脚本中使用quantizefunction。 DTrace文档说明如下量化 :

指定expression式的值的二次幂频率分布。 增加小于指定expression式的最高幂次桶中的值。

'value'列是(timestamp - track[arg2]) / 1000000 ,其中timestamp是当前时间(以纳秒为单位)。 所以显示的值是以毫秒为单位的持续时间。

综合起来,route_user_read结果图告诉你有两个请求需要128到256毫秒。

当你有很多的请求,并希望得到你的服务器如何执行的一般意义(例如,你可以快速识别一个双模态分布),这个输出是有用的。 如果您只想查看每个请求的执行时间,请尝试使用printf函数而不是量化。