PHP 7.2 的 slowlog 必须在 php-fpm Pool 段(如 [www])配置,仅记录 PHP 脚本执行耗时,不包含 Nginx、网络或数据库连接等外部耗时;需同时设置 slowlog、request_slowlog_timeout(建议从2s起)和 request_terminate_timeout=0,并确保路径可写、重载生效。

PHP 7.2 的慢请求日志(slowlog)由 php-fpm 控制,不是通过 php.ini 配置,而是必须在 php-fpm 的 Pool 配置段中启用。它只记录 PHP 脚本在 fpm worker 进程内实际执行耗时过长的请求,不包含 Nginx 响应、网络传输或数据库连接建立等前置/外部耗时。
确认配置位置与修改范围
PHP 7.2 源码编译安装后,Pool 配置通常位于:
-
/usr/local/php/etc/php-fpm.d/www.conf(推荐检查此路径) - 或直接在
/usr/local/php/etc/php-fpm.conf的[www]段内设置
⚠️ 注意:request_slowlog_timeout 和 slowlog 必须写在 Pool 段(如 [www] 下),写在全局段无效。
关键三行配置缺一不可
在 Pool 配置块中添加或取消注释以下三行(路径和值按需调整):
立即学习“PHP免费学习笔记(深入)”;
- slowlog = /var/log/php-fpm-slow.log —— 日志绝对路径,确保目录存在且 php-fpm worker 用户(如 www-data 或 nginx)有写权限
-
request_slowlog_timeout = 2s —— 触发阈值,建议从
2s起调;线上可逐步放宽至5s,避免设为30s导致漏掉真实卡顿(常见卡点在 8–12s) -
request_terminate_timeout = 0 —— 推荐显式设为
0(不限制),防止脚本僵死干扰 slowlog 判断逻辑
验证与生效步骤
改完配置后必须执行两步才能生效:
- 语法检测:
php-fpm -t—— 确保无报错 - 重载服务:
systemctl reload php-fpm(或kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`)
若日志文件始终为空,常见原因包括:路径目录未手动创建、worker 用户无写权限、超时值设得过高、或配置未落在 Pool 段内。
查看与解读 slowlog 内容
日志每条记录含时间戳、PID、执行时长、请求 URL 和 backtrace。例如:
[15-Sep-2026 10:22:41] [pool www] pid 12345script_filename = /var/www/api/user.php
[0x7f8b1c2a3d40] curl_exec() /var/www/api/user.php:87
[0x7f8b1c2a3cc0] api_call() /var/www/api/user.php:42
backtrace 是从卡点向上回溯的函数调用链,指出哪一行、哪个函数耗时异常,但不含变量值或完整堆栈。重点关注最末尾那一行(即实际阻塞点)。



















