dtrace 脚本输出是啥意思?

Posted

技术标签:

【中文标题】dtrace 脚本输出是啥意思?【英文标题】:What dtrace script output means?dtrace 脚本输出是什么意思? 【发布时间】:2014-04-11 16:17:51 【问题描述】:

我正在我的 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】:

输出是histogram。您得到一个直方图是因为您在 D 脚本中使用了 quantize 函数。 DTrace documentation says the following on quantize:

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

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

总而言之,route_user_read 结果图告诉您,您有 2 个请求花费了 128 到 256 毫秒。

当您有大量请求并想要大致了解服务器的执行情况时,此输出很有用(例如,您可以快速识别双模分布)。如果您只想查看每个请求需要多长时间,请尝试使用 printf function 而不是 quantize。

【讨论】:

以上是关于dtrace 脚本输出是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

SQL脚本中的go是啥意思

如何在 dtrace 中找到参数的意思

shell脚本中的$*,$@和$#分别是啥意思?

if [ $# -ne 1 ];then 是啥意思?

$@ 在 shell 脚本中是啥意思?

框架、编程语言和脚本语言是啥意思?