��֧�� DTrace ��̬���ٵ�ƽ̨�ϣ��������� PHP �� DTrace ��̬̽�롣
��ο�����ϵͳ�ĵ���ȡ���ò���ϵͳ DTrace ֧�ֵ���Ϣ�� ���磬�� Oracle Linux ϵͳ������ UEK3 �ںˣ����������²�����
# modprobe fasttrap
# chmod 666 /dev/dtrace/helper
���� chmod �����Ҳ����ʹ�� ACL �������������ض��û������豸�ķ���Ȩ�ޡ�
ʹ�� --enable-dtrace ���ò������� PHP��
# ./configure --enable-dtrace ...
# make
# make install
������������ PHP ���ĵľ�̬̽�롣�����ṩ������̽��� PHP ��չ��Ҫ�ֱ���
̽������ | ̽������ | ̽����� |
---|---|---|
request-startup | ����ʼʱ������ | char *file, char *request_uri, char *request_method |
request-shutdown | ����ر�ʱ������ | char *file, char *request_uri, char *request_method |
compile-file-entry | �ű���ʼ����ʱ������ | char *compile_file, char *compile_file_translated |
compile-file-return | �ű���ɱ���ʱ������ | char *compile_file, char *compile_file_translated |
execute-entry | ���������鿪ʼִ��ʱ���������磺�������ã��ļ������Լ��������ָ�ʱ�ᱻ������ | char *request_file, int lineno |
execute-return | ����������ִ�����֮���� | char *request_file, int lineno |
function-entry | PHP ������� PHP �������߷�������ʱ������ | char *function_name, char *request_file, int lineno, char *classname, char *scope |
function-return | PHP ����� PHP �������߷������÷��غ���. | char *function_name, char *request_file, int lineno, char *classname, char *scope |
exception-thrown | ���쳣�׳�ʱ������ | char *classname |
exception-caught | ���쳣������ʱ������ | char *classname |
error | ���� error_reporting ���趨��Σ��ڷ�������ʱ���ᴥ���� | char *errormsg, char *request_file, int lineno |
PHP ��չ����ӵ�ж���ľ�̬̽�롣
Ҫ�г� 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
Provider һ���� php �͵�ǰ���� id ����ɡ�
������е��� Apache web ����������ôģ�����ƿ����� libphp5.so�� ���ҿ��ܻ���ֶ����Ϣ��ÿ�������е� Apache ���̶�Ӧһ������顣
Function Name һ�б�ʾ Provider ��Ӧ�� PHP �ڲ� C ʵ�ֺ������ơ�
���û�������κ� PHP ���̣���ô�Ͳ�����ʾ�κ� PHP ̽�롣
����չʾ�˻����� DTrace D �ű���
Example #1 all_probes.d for tracing all PHP Static Probes with DTrace
#!/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)); }
�˽ű��� dtrace ������ʹ���� -Z ѡ� ��ѡ�֤��ʹ��û���κ� PHP �������е�ʱ��ű�Ҳ�ܹ���ȷִ�С� ���ʡ���˴�ѡ���û���κ�̽��ɼ�ص�ʱ�ű���������ִֹ�С�
�����д˽ű��Ĺ����У��������ȫ�� PHP ���ľ�̬̽�롣 ���� D �ű���
# ./all_probes.d
������һ�� PHP �ű����� PHP Ӧ�ã��������м�ص� D �ű������ÿ��̽�뱻����ʱ��Я���IJ�����
������֮��ʹ�� ^C ����ֹ D �ű���ִ�С�
�ڶ� CPU �������ϣ�̽�����ʾ˳����ܲ��������ģ���ȡ�����Ŀ� CPU ִ��̽���Լ���� CPU ֮����߳�Ǩ������� ����ͨ����ʾ̽��ʱ��������ٻ��������磺
php*:::function-entry { printf("%lld: PHP function-entry ", walltimestamp); [ . . .] }