# stap -l 'process.provider("php").mark("*")' -c 'sapi/cli/php -i'
This can also be archived by:
stap -l 'process("sapi/cli/php").mark("*")'
And, no need to be root to run this command.Π ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°Ρ Linux Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·ΠΎΠ½Π΄ΠΎΠ² DTrace Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ SystemTap. ΠΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² PHP 5.4.20 ΠΈ PHP 5.5.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ SystemTap SDT:
# yum install systemtap-sdt-devel
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ PHP Ρ DTrace:
# ./configure --enable-dtrace ... # make
Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ PHP-Π·ΠΎΠ½Π΄Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° stap:
# stap -l 'process.provider("php").mark("*")' -c 'sapi/cli/php -i'
ΠΡΠΈΠΌΠ΅ΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄:
process("sapi/cli/php").provider("php").mark("compile__file__entry")
process("sapi/cli/php").provider("php").mark("compile__file__return")
process("sapi/cli/php").provider("php").mark("error")
process("sapi/cli/php").provider("php").mark("exception__caught")
process("sapi/cli/php").provider("php").mark("exception__thrown")
process("sapi/cli/php").provider("php").mark("execute__entry")
process("sapi/cli/php").provider("php").mark("execute__return")
process("sapi/cli/php").provider("php").mark("function__entry")
process("sapi/cli/php").provider("php").mark("function__return")
process("sapi/cli/php").provider("php").mark("request__shutdown")
process("sapi/cli/php").provider("php").mark("request__startup")
ΠΡΠΈΠΌΠ΅Ρ #1 Π‘ΠΊΡΠΈΠΏΡ all_probes.stp β ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ PHP-Π·ΠΎΠ½Π΄ΠΎΠ²
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
printf("Probe compile__file__entry\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
printf("Probe compile__file__return\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
printf("Probe error\n");
printf(" errormsg %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
printf("Probe exception__caught\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
printf("Probe exception__thrown\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
printf("Probe execute__entry\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
printf("Probe execute__return\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
printf("Probe function__entry\n");
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
printf("Probe function__return: %s\n", user_string($arg1));
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
printf("Probe request__shutdown\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
printf("Probe request__startup\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
ΠΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ ΡΠΊΡΠΈΠΏΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ PHP-Π·ΠΎΠ½Π΄ΠΎΠ² Π½Π° Π²ΡΡΠΌ ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ PHP-ΡΠΊΡΠΈΠΏΡΠ°:
# stap -c 'sapi/cli/php test.php' all_probes.stp
# stap -l 'process.provider("php").mark("*")' -c 'sapi/cli/php -i'
This can also be archived by:
stap -l 'process("sapi/cli/php").mark("*")'
And, no need to be root to run this command.