PHP-FPM慢日志(Slow Log)配置与排查指南

陆遥
陆遥
发布时间:2026-10-13 | 4人浏览过
原创

在使用 PHP-FPM 管理 PHP 进程的场景中,当遇到响应缓慢的情况时,除了检查数据库,PHP 本身的执行效率也是关键因素。就像 MySQL 拥有慢查询日志一样,PHP-FPM 也提供了“慢执行日志”(slow log)功能,能够记录执行时间超过阈值的 PHP 脚本及其详细的调用栈信息,从而辅助开发者精准定位性能瓶颈。

准备条件

在开始配置之前,请确保您的运行环境满足以下条件:

  • 已安装并运行 PHP-FPM 服务。
  • 拥有对 php-fpm 配置文件(通常位于 php-fpm.conf 或 /etc/php-fpm.d/www.conf 等)的编辑权限。
  • 了解基本的 Linux 命令行操作,以便查看日志文件。

开启慢执行日志配置

不同版本的 PHP-FPM 在配置语法上略有差异,请根据实际安装的版本进行设置。核心需要配置两个参数:request_slowlog_timeout(超时阈值)和 slowlog(日志保存路径)。

第1步:确定 PHP-FPM 版本

执行以下命令查看版本,以判断采用哪种配置方式:

php-fpm -v

如果版本号低于 5.3.3,使用 XML 格式配置;如果等于或高于 5.3.3,使用标准键值对格式配置。

第2步:修改配置文件

如果是 PHP 5.3.3 之前的版本:
在 php-fpm.conf 中的相应 <value> 节点下添加如下配置:

<value name="request_slowlog_timeout">5s</value>
<value name="slowlog">logs/php-fpm-slowlog.log</value>

如果是 PHP 5.3.3 及之后的版本:
直接在配置文件中(通常在池的定义部分,如 [www] 下)添加以下两行:

request_slowlog_timeout = 5s
slowlog = /usr/local/php/log/php-fpm-slowlog.log

参数说明:

  • request_slowlog_timeout:设置脚本执行时间的阈值。如果脚本执行时间超过此值,将被记录到日志中。单位可以是秒(s)、毫秒(ms)等,例如 5s 表示 5 秒。0 表示禁用。
  • slowlog:指定慢日志文件的绝对路径。请确保该目录存在且 PHP-FPM 用户有写入权限。

第3步:重载 PHP-FPM 配置

修改配置文件后,必须重启或平滑重载 PHP-FPM 才能使更改生效:

# CentOS/RHEL 6
service php-fpm restart

# CentOS/RHEL 7+ / Ubuntu (systemd)
systemctl reload php-fpm

日志内容解读与排错

配置生效后,当有 PHP 脚本执行时间超过设定阈值时,PHP-FPM 会在后台自动将该进程的当前调用栈记录到指定的 slowlog 文件中。同时,标准错误日志中也会有一条警告提示。

观察常规错误日志

在 error_log 中,您会看到类似的 WARNING 记录:

[19-Dec-2013 15:55:37] WARNING: [pool www] child 18575, script '/home/admin/web/htdocs/sandbox_canglong/test/tt.php' (request: "GET /test/tt.php") executing too slow (1.006222 sec), logging

这只是一个通知,告诉开发者有脚本超时了,具体原因需查看慢日志文件。

分析慢日志详情

打开 slowlog 指定的文件,可以看到详细的调用栈信息,例如:

[19-Dec-2013 16:54:49] [pool www] pid 18575
script_filename = /home/admin/web/htdocs/sandbox_canglong/test/tt.php
[0x0000000003a00dc8] curl_exec() /home/admin/web/htdocs/sandbox_canglong/test/tt.php:2
[0x0000000003a00cd0] exfilter_curl_get() /home/admin/web/htdocs/sandbox_canglong/test/tt.php:6

关键字段说明:

  1. pid:发生超时的 PHP-FPM 子进程 ID。
  2. script_filename:导致超时的入口 PHP 脚本完整路径。
  3. curl_exec() 等函数名:显示的是调用栈,从底向上看,最后执行的函数排在最上面。这里显示 curl_exec() 是导致超时的最后一环。
  4. exfilter_curl_get():这是调用 curl_exec() 的上一级函数。
  5. :2 和 :6:表示该行代码在对应脚本文件中的具体行号,方便直接跳转到源码定位问题。

完成判断

您可以通过以下操作验证配置是否成功:

  1. 编写一个简单的测试脚本 sleep_test.php,内容包含 sleep(6);。
  2. 通过浏览器或命令行访问该脚本。
  3. 等待数秒后,检查配置的 slowlog 路径,若发现包含 sleep() 记录的日志条目,则说明配置已成功生效。

简要总结

合理配置 PHP-FPM 的慢执行日志是 Web 性能优化的重要一步。它不仅能帮助开发者识别哪些接口响应慢,还能通过调用栈精确指出是哪一行代码、哪个函数拖慢了整体进度。建议在生产环境中开启此项功能,但需注意调整合理的超时阈值,避免日志文件迅速膨胀影响磁盘空间。

以上就是 PHP-FPM 慢执行日志的配置与使用方法详细内容,更多关于 PHP-FPM 性能优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表