我正在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/

10-10 13:10