Користење PHP и DTrace
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Користење PHP и DTrace
Референца за `features.dtrace.dtrace.php` со подобрена типографија и навигација.
Користење PHP и DTrace
PHP can be configured with DTrace static probes on platforms that support DTrace Dynamic Tracing.
PHP може да се конфигурира со статични DTrace сонди на платформи што поддржуваат DTrace динамично трасирање.
Конфигурирање на PHP за статични DTrace сонди
# modprobe fasttrap
# chmod 666 /dev/dtrace/helper
Погледнете ја надворешната платформа специфична документација за овозможување на поддршката за DTrace на оперативниот систем. На пример, на Oracle Linux стартувајте UEK3 јадро и направете: chmodНаместо да користите
, може да користите правило за ACL пакет за да го ограничите пристапот до уредот до специфичен корисник. --enable-dtrace Изградете PHP со
# ./configure --enable-dtrace ...
# make
# make installпараметар за конфигурација:
Ова ги прави статичните сонди достапни во основното PHP. Секое PHP проширување што обезбедува свои сонди треба да се гради одделно како споделени проширувања. За да ги овозможите сондите, поставете USE_ZEND_DTRACE=1
Статични сонди на DTrace во основното PHP
| Име на сонда | Опис на сонда | Аргументи на сонда |
|---|---|---|
request-startup |
Следниве статични сонди се достапни во PHP | Се активира кога започнува барање.filechar *request_urichar *request_method |
request-shutdown |
, char * | Се активира кога започнува барање.filechar *request_urichar *request_method |
compile-file-entry |
Се активира кога завршува барањето. | Се активира кога започнува барање.compile_filechar *compile_file_translated |
compile-file-return |
Се активира кога започнува компилацијата на скрипта. | Се активира кога започнува барање.compile_filechar *compile_file_translated |
execute-entry |
Се активира кога завршува компилацијата на скрипта. | Се активира кога започнува барање.request_fileСе активира кога треба да се изврши низа од опкодови. На пример, се активира при повици на функции, вклучувања и продолжувања на генератори. lineno |
execute-return |
PHP може да се конфигурира со статични DTrace сонди на платформи што поддржуваат DTrace динамично трасирање. | Се активира кога започнува барање.request_fileСе активира кога треба да се изврши низа од опкодови. На пример, се активира при повици на функции, вклучувања и продолжувања на генератори. lineno |
function-entry |
Се активира по извршување на низа од opcode. | Се активира кога започнува барање.function_namechar *request_fileСе активира кога треба да се изврши низа од опкодови. На пример, се активира при повици на функции, вклучувања и продолжувања на генератори. linenochar *classnamechar *scope |
function-return |
Се активира кога PHP енџинот влегува во повик на PHP функција или метод. | Се активира кога започнува барање.function_namechar *request_fileСе активира кога треба да се изврши низа од опкодови. На пример, се активира при повици на функции, вклучувања и продолжувања на генератори. linenochar *classnamechar *scope |
exception-thrown |
Се активира кога PHP енџинот се враќа од повик на PHP функција или метод. | Се активира кога започнува барање.classname |
exception-caught |
Се активира кога ќе се фрли исклучок. | Се активира кога започнува барање.classname |
error |
Се активира кога ќе се фати исклучок. error_reporting level. | Се активира кога започнува барање.errormsgchar *request_fileСе активира кога треба да се изврши низа од опкодови. На пример, се активира при повици на функции, вклучувања и продолжувања на генератори. lineno |
Се активира кога ќе се случи грешка, без оглед на
PHP екстензиите исто така може да имаат дополнителни статични сонди.
За да ги наведете достапните сонди, стартувајте PHP процес и потоа извршете:
# dtrace -l
Излезот ќе биде сличен на:
ID PROVIDER MODULE FUNCTION NAME
[ . . . ]
4 php15271 php dtrace_compile_file compile-file-entry
5 php15271 php dtrace_compile_file compile-file-return
6 php15271 php zend_error error
7 php15271 php ZEND_CATCH_SPEC_CONST_CV_HANDLER exception-caught
8 php15271 php zend_throw_exception_internal exception-thrown
9 php15271 php dtrace_execute_ex execute-entry
10 php15271 php dtrace_execute_internal execute-entry
11 php15271 php dtrace_execute_ex execute-return
12 php15271 php dtrace_execute_internal execute-return
13 php15271 php dtrace_execute_ex function-entry
14 php15271 php dtrace_execute_ex function-return
15 php15271 php php_request_shutdown request-shutdown
16 php15271 php php_request_startup request-startup
Вредностите во колоната Провајдер се состојат од php и идентификаторот на процесот на моментално активниот PHP процес.
Список на статични DTrace сонди во PHP libphp5.soАко работи веб-серверот Apache, името на модулот може да биде, на пример,
Колоната Функција се однесува на имињата на функциите за имплементација на C на PHP каде што се наоѓа секој провајдер.
Ако PHP процес не работи, тогаш нема да бидат прикажани PHP сонди.
, и би имало повеќе блокови со списоци, еден за секој активен Apache процес.
Овој пример ги покажува основите на скриптниот јазик DTrace D.
Пример #1 all_probes.d Пример за DTrace со PHP
#!/usr/sbin/dtrace -Zs
#pragma D option quiet
php*:::compile-file-entry
{
printf("PHP compile-file-entry\n");
printf(" compile_file %s\n", copyinstr(arg0));
printf(" compile_file_translated %s\n", copyinstr(arg1));
}
php*:::compile-file-return
{
printf("PHP compile-file-return\n");
printf(" compile_file %s\n", copyinstr(arg0));
printf(" compile_file_translated %s\n", copyinstr(arg1));
}
php*:::error
{
printf("PHP error\n");
printf(" errormsg %s\n", copyinstr(arg0));
printf(" request_file %s\n", copyinstr(arg1));
printf(" lineno %d\n", (int)arg2);
}
php*:::exception-caught
{
printf("PHP exception-caught\n");
printf(" classname %s\n", copyinstr(arg0));
}
php*:::exception-thrown
{
printf("PHP exception-thrown\n");
printf(" classname %s\n", copyinstr(arg0));
}
php*:::execute-entry
{
printf("PHP execute-entry\n");
printf(" request_file %s\n", copyinstr(arg0));
printf(" lineno %d\n", (int)arg1);
}
php*:::execute-return
{
printf("PHP execute-return\n");
printf(" request_file %s\n", copyinstr(arg0));
printf(" lineno %d\n", (int)arg1);
}
php*:::function-entry
{
printf("PHP function-entry\n");
printf(" function_name %s\n", copyinstr(arg0));
printf(" request_file %s\n", copyinstr(arg1));
printf(" lineno %d\n", (int)arg2);
printf(" classname %s\n", copyinstr(arg3));
printf(" scope %s\n", copyinstr(arg4));
}
php*:::function-return
{
printf("PHP function-return\n");
printf(" function_name %s\n", copyinstr(arg0));
printf(" request_file %s\n", copyinstr(arg1));
printf(" lineno %d\n", (int)arg2);
printf(" classname %s\n", copyinstr(arg3));
printf(" scope %s\n", copyinstr(arg4));
}
php*:::request-shutdown
{
printf("PHP request-shutdown\n");
printf(" file %s\n", copyinstr(arg0));
printf(" request_uri %s\n", copyinstr(arg1));
printf(" request_method %s\n", copyinstr(arg2));
}
php*:::request-startup
{
printf("PHP request-startup\n");
printf(" file %s\n", copyinstr(arg0));
printf(" request_uri %s\n", copyinstr(arg1));
printf(" request_method %s\n", copyinstr(arg2));
}
Оваа скрипта ја користи -Z опција на
dtraceза следење на сите PHP статични сонди со DTrace
, дозволувајќи му да се извршува кога нема активен PHP процес. Ако оваа опција беше изоставена, скриптата веднаш би завршила бидејќи знае дека ниту една од сондите што треба да се следат не постои.
# ./all_probes.d
Скриптата следи сите основни PHP статични точки на сондирање во текот на извршувањето на активна PHP скрипта. Стартувајте ја D скриптата:
Кога следењето е завршено, D скриптата може да се прекине со CTRL+C.
Стартувајте PHP скрипта или апликација. Скриптата за следење D ќе ги прикаже аргументите на секоја сондирана точка додека се активира.
php*:::function-entry
{
printf("%lld: PHP function-entry ", walltimestamp);
[ . . .]
}