手机版

PHP的DTrace动态跟踪:使用 SystemTap 监控 PHP DTrace 静态探针

2019-09-09 阅读 :

在某些 Linux 发行版上,可以使用 SystemTap 跟踪工具来跟踪 PHP 的静态 DTrace 探针。 此特性在 PHP 5.4.20 和 PHP 5.5 中具备。

安装支持 SystemTap 的 PHP

安装 SystemTap SDT 开发包。

# yum install systemtap-sdt-devel

安装 PHP 并启用 DTrace 探针:

# ./configure --enable-dtrace ...# make

使用 SystemTap 列出 PHP 静态探针

使用 stap 命令列出 PHP 静态探针:

# 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")

SystemTap 示例

Example #1 all_probes.stp for tracing all PHP Static Probes with SystemTap

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

服务器软件 网络工具 网站工具 服务器教程 服务器知识 服务器技术 服务器之家 vps教程 vps是什么

本文标题:PHP的DTrace动态跟踪:使用 SystemTap 监控 PHP DTrace 静态探针 - 服务器教程_服务器技术_服务器知识_vps教程
本文地址:https://www.helloaliyun.com/tutorial/413.html

相关文章

  • CentOS 7 常用命令(系统关机、重启以及登出)

    关机:(系统的关机、重启以及登出 ) # 关闭系统(1)[root@localhost ~]# shutdown -h now # 关闭系统(2)[root@localhost ~]# init 0 # 关闭系统(3)[root@localhost ~]# telinit 0 # 按预定时间关闭系统[root@localhost...

    2019-12-07 服务器教程
  • linux重启命令 reboot与shutdown -r now的区别与联系

    在linux命令中reboot是重新启动,shutdown -r now是立即停止然后重新启动,都说他们两个是一样的,其实是有一定的区别的。shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告...

    2019-12-07 服务器教程
  • CentOS 7 如何使用命令重启或关机

    安装GNOME的朋友们首先切换到字符界面。切换到字符界面的方法如下: 先登陆进入系统,进入图形化界面,然后按Ctrl+Alt+F6(笔记本的是Ctrl+Alt+shift+Fn),进入字符界面。关机命令:shutdown或poweroffshutdown:shutdown -h now...

    2019-12-07 服务器教程
  • CentOS 7 正确关机重启的命令方法

    linux主要用于服务器领域,而在服务器上执行一项服务是永无止境的,除非遇到特殊情况,否则不会关机。和Windows不同,在linux系统下,很多进程是在后台执行的。在屏幕背后,可能有很多人同时在工作。如果直接按下电源的按钮,其他...

    2019-12-07 服务器教程
  • CentOS下的yum upgrade和yum update区别,没事别乱用!

    说明:生产环境对软件版本和内核版本要求非常精确,别没事有事随便的进行yum update操作!!!!!!!!!yum update: 升级所有包同时也升级软件和系统内核yum upgrade:只升级所有包,不升级软件和系统内核...

    2019-12-07 服务器教程
你可能感兴趣
热门浏览