Что потребителя сценарий вывода средств?


Я отслеживаю зонды DTrace в моем restify.JS application (restify это http-сервер в узле.js, который обеспечивает поддержку dtrace). Я использую потребителя образец сценария из документации restify выглядит следующим образом:

#!/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 2

1 ответ:

На выходе получается гистограмма . Вы получаете гистограмму, потому что используете функцию quantize в своем D-скрипте. В документации по DTrace говорится следующее о квантовании :

Двухчастотное распределение значений указанных выражений. Увеличивает значение в наибольшей степени из двух ведер, которое меньше указанного выражения.

Столбцы 'value' являются результатом (timestamp - track[arg2]) / 1000000 , где timestamp-текущее время в наносекунды. Таким образом, показанное значение-длительность в миллисекундах.

Собирая все это вместе, график результатов route_user_read говорит вам, что у вас было 2 запроса, которые заняли от 128 до 256 миллисекунд.

Этот вывод полезен, когда у вас много запросов и вы хотите получить общее представление о том, как работает ваш сервер (например, вы можете быстро определить бимодальное распределение). Если вы просто хотите узнать, сколько времени занимает каждый запрос, попробуйте использовать printf функция вместо квантования.