У меня следующая ошибка:
dtrace: error on enabled probe ID 3 (ID 7343: php15810:php:dtrace_execute_ex:function-return): invalid address (0x0) in action #2 at DIF offset 24
когда я пытаюсь отследить свой PHP-скрипт (sudo ./trace-php.d
).
В основном, чего я хотел добиться, так это отображать время/количество распределения с помощью функции PHP. Вроде работает, но меня раздражает эта ошибка. Я знаю, что могу отправить это /dev/null
, но я хотел бы понять и исправить это.
Вот мой код dtrace:
#!/usr/sbin/dtrace -Zs
#pragma D option quiet
php*:::function-entry
{
self->vts = timestamp;
self->cmd = arg0
}
php*:::function-return
/self->vts/
{
@time[copyinstr(self->cmd)] = quantize(timestamp - self->vts);
@num = count();
self->vts = 0;
self->cmd = 0;
}
profile:::tick-2s
{
printf("\nPHP commands/second total: ");
printa("%@d; commands latency (ns) by pid & cmd:", @num);
printa(@time);
clear(@time);
clear(@num);
}
Пример вывода (при запуске некоторого php-скрипта):
dtrace: error on enabled probe ID 3 (ID 7343: php15810:php:dtrace_execute_ex:function-return): invalid address (0x0) in action #2 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 7343: php15810:php:dtrace_execute_ex:function-return): invalid address (0x0) in action #2 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 7343: php15810:php:dtrace_execute_ex:function-return): invalid address (0x0) in action #2 at DIF offset 24
dtrace: error on enabled probe ID 3 (ID 7343: php15810:php:dtrace_execute_ex:function-return): invalid address (0x0) in action #2 at DIF offset 24
PHP commands/second total: 1549; commands latency (ns) by pid & cmd:
variable_get
value ------------- Distribution ------------- count
1024 | 0
2048 |@@@@@@@@@@@@@@@@@@@@@@@@@@@ 4
4096 |@@@@@@@ 1
8192 |@@@@@@@ 1
16384 | 0
__construct
value ------------- Distribution ------------- count
1024 | 0
2048 |@@@@@@@@@@@@@@@@@@@@ 3
4096 |@@@@@@@@@@@@@ 2
8192 |@@@@@@@ 1
16384 | 0
features_array_diff_assoc_recursive
value ------------- Distribution ------------- count
16384 | 0
32768 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1
65536 | 0
features_export_info
value ------------- Distribution ------------- count
2048 | 0
4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 122
8192 |@@@@@@ 23
16384 |@ 4
32768 | 0
arg0
когда-нибудьNULL
? - person Andrew Henle   schedule 11.04.2016NULL
... Возможно ли, что к тому времени, когда вы сделаете вызовcopyinstr()
, он станет недействительным? - person Andrew Henle   schedule 11.04.2016copyinstr()
. Это может иметь значение, хотя в данном случае адреса не были0x0
: stackoverflow.com/questions/1198114/ Вы можете попробовать переместитьcopyinstr()
в зондfunction-entry
или добавить/ arg0 /
к зондуfunction-entry
. Я подозреваю, что вы можете видеть, как PHP загружается сам и выполняет вызовы PHP до того, как он заполнит какую-то таблицу символов. Добавьте дополнительный зондfunction-entry
с/ arg0 == 0 /
, который выдает или сохраняет результаты отustack()
. - person Andrew Henle   schedule 12.04.2016