Что потребителя сценарий вывода средств?
Я отслеживаю зонды 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 ответ:
На выходе получается гистограмма . Вы получаете гистограмму, потому что используете функцию
quantize
в своем D-скрипте. В документации по DTrace говорится следующее о квантовании :Двухчастотное распределение значений указанных выражений. Увеличивает значение в наибольшей степени из двух ведер, которое меньше указанного выражения.
Столбцы 'value' являются результатом
(timestamp - track[arg2]) / 1000000
, где timestamp-текущее время в наносекунды. Таким образом, показанное значение-длительность в миллисекундах.Собирая все это вместе, график результатов route_user_read говорит вам, что у вас было 2 запроса, которые заняли от 128 до 256 миллисекунд.
Этот вывод полезен, когда у вас много запросов и вы хотите получить общее представление о том, как работает ваш сервер (например, вы можете быстро определить бимодальное распределение). Если вы просто хотите узнать, сколько времени занимает каждый запрос, попробуйте использовать printf функция вместо квантования.