什么是dtrace脚本输出意味着什么?

时间:2014-04-11 16:17:52

标签: node.js restify dtrace

我正在我的restify.js应用程序中跟踪DTrace探测器(解析它是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吗?

1 个答案:

答案 0 :(得分:3)

输出为histogram。您正在获得直方图,因为您在D脚本中使用quantize函数。 DTrace documentation says the following on quantize

  

指定表达式的值的二次幂频率分布。增加最大二次幂桶的值,该值小于指定的表达式。

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

将这一切放在一起,route_user_read结果图告诉您有2个请求需要128到256毫秒。

当您有大量请求并想要了解服务器的执行情况时,此输出非常有用(例如,您可以快速识别双模态分布)。如果您只想查看每个请求的持续时间,请尝试使用printf function代替量化。