我正在restify.js应用程序中跟踪dtrace探测(restify它是node.js中提供dtrace支持的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
? 最佳答案
输出为ahistogram。因为在d脚本中使用了quantize
函数,所以得到了直方图。DTrace documentation says the following on quantize:
指定表达式值的两个频率分布的幂。以小于指定表达式的两个bucket的最大功率递增该值。
“value”列是(timestamp - track[arg2]) / 1000000
的结果,其中timestamp是当前时间(以纳秒为单位)。所以显示的值是以毫秒为单位的持续时间。
总而言之,route_user_read result图告诉您有两个请求花费了128到256毫秒。
当您有很多请求,并且希望大致了解服务器的运行情况时(例如,您可以快速识别双模分布),此输出非常有用。如果您只想查看每个请求需要多长时间,请尝试使用printf function而不是量化。
关于node.js - dtrace脚本输出是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23017744/