跳转至

Profiling PHP

从 Datakit Version-1.13.0 开始支持使用 dd-trace-php 作为 PHP 项目的应用性能监测工具。

前置条件

  • Linux X64 with glibc 2.17+,Linux X64 with musl v1.2+
  • PHP 7.1+ NTS(Non-Thread Safe)

安装 dd-trace-php

下载安装脚本 datadog-setup.php 并执行:

wget https://github.com/DataDog/dd-trace-php/releases/download/0.90.0/datadog-setup.php
php datadog-setup.php --enable-profiling

安装过程中脚本会自动检测当前系统安装的 phpphp-fpm 路径,并让你选择哪些程序需要开启 profiling,根据你的需要输入相应的序号即可。

Searching for available php binaries, this operation might take a while.
Multiple PHP binaries detected. Please select the binaries the datadog library will be installed to:

   1. php --> /usr/bin/php8.1
   2. php8.1 --> /usr/bin/php8.1
   3. php-fpm8.1 --> /usr/sbin/php-fpm8.1

Select binaries using their number. Multiple binaries separated by space (example: 1 3): 1 2 3

如果你知道当前系统的 phpphp-fpm 的安装路径,也可以在执行安装脚本的时候通过 --php-bin 参数直接指定 php 的路径,这样可以跳过上述检测和选择的步骤,例如:

php datadog-setup.php --enable-profiling --php-bin=/usr/bin/php8.1 --php-bin=/usr/sbin/php-fpm8.1

程序安装过程中需要从 github.com 下载安装包,根据你的网络情况可能需要一些时间,请等待安装程序成功退出,之后可以执行命令 php --ri "datadog-profiling" 验证安装是否成功。

php --ri "datadog-profiling"

datadog-profiling

Version => 0.90.0
Profiling Enabled => true
Experimental CPU Time Profiling Enabled => true
Allocation Profiling Enabled => true
...
Note

在编写此文档时 Datakit 最高支持到 dd-trace-php v0.90.0 版本,更高的版本没有经过系统性测试,兼容性未知,如您在使用中遇到任何问题,可随时与我们联系。

开启 Profiling

启动 PHP 脚本时设置如下环境变量:

DD_PROFILING_ENABLED=1 \
DD_PROFILING_ENDPOINT_COLLECTION_ENABLED=1 \
DD_PROFILING_ALLOCATION_ENABLED=1 \
DD_PROFILING_EXPERIMENTAL_CPU_TIME_ENABLED=1 \
DD_PROFILING_EXPERIMENTAL_TIMELINE_ENABLED=1 \
DD_PROFILING_LOG_LEVEL=info \
DD_SERVICE=my-php-cli-app \
DD_ENV=prod \
DD_VERSION=1.22.333 \
DD_AGENT_HOST=127.0.0.1 \
DD_TRACE_AGENT_PORT=9529 \
php <your-path-to>.php

PHP-FPM 的进程池配置目录 pool.d 下的配置文件中(默认只有一个 www.conf 配置文件)使用 env 指令在 www.conf 添加如下环境变量:

Note

可以尝试使用 php-fpm -i | grep Configuration 来确认 php-fpm 当前加载配置文件的位置:

php-fpm8.1 -i | grep Configuration
Configuration File (php.ini) Path => /etc/php/8.1/fpm
...
ls -l /etc/php/8.1/fpm/pool.d
total 48
-rw-r--r-- 1 root root 20901 Aug  7 21:22 www.conf
如果你的 php-fpm 程序被注册为 systemd 服务,也可以尝试使用命令 systemctl status php-fpm.service | grep .conf 来查看当前的配置文件路径:
systemctl status php8.1-fpm.service | grep .conf
Process: 629814 ExecStart=/usr/sbin/php-fpm8.1 --nodaemonize --fpm-config /etc/php/8.1/fpm/php-fpm.conf (code=exited, status=0/SUCCESS)
Process: 629818 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.1/fpm/pool.d/www.conf 81 (code=exited, status=0/SUCCESS)
Process: 630872 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/8.1/fpm/pool.d/www.conf 81 (code=exited, status=0/SUCCESS)
...

...
; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

env[DD_PROFILING_ENABLED]=true
env[DD_PROFILING_ENDPOINT_COLLECTION_ENABLED]=true
env[DD_PROFILING_ALLOCATION_ENABLED]=true
env[DD_PROFILING_EXPERIMENTAL_CPU_TIME_ENABLED]=true
env[DD_PROFILING_EXPERIMENTAL_TIMELINE_ENABLED]=true
env[DD_PROFILING_LOG_LEVEL]=info
env[DD_SERVICE]=my-fpm-app
env[DD_ENV]=dev
env[DD_VERSION]=1.2.33
env[DD_AGENT_HOST]=127.0.0.1
env[DD_TRACE_AGENT_PORT]=9529

重启 php-fpm 并访问你的项目。

稍等几分钟后便可以在 观测云控制台 查看相关数据。

文档评价

文档内容是否对您有帮助? ×