启用 PHP-FPM 慢日志可精准定位瓶颈,生产环境首次启用推荐将 request_slowlog_timeout 阈值设为 5s,避免因阈值过高(如 30s)漏掉实际耗时 8–12s 的卡顿请求。
原因分析
慢日志由 PHP-FPM 内置模块提供,原理是监控每个请求的执行时间,但仅捕获 PHP 脚本执行阶段,不包括 Nginx 耗时、网络延迟或数据库连接建立时间。触发条件是单个请求在 php-fpm 进程内执行超过设定秒数,例如 5s,且该进程已启用 slowlog 配置。常见错误现象包括 slowlog 文件空或根本没生成日志文件,大概率是配置没生效或超时阈值设得太高。
解决方案
1. 宝塔面板配置步骤
登录宝塔面板,进入【软件商店】→ 找到已安装的 PHP 版本 (如 PHP 8.2) → 点击右侧【设置】→ 切换至【配置修改】选项卡。向下滚动找到 slowlog 相关配置项,确认以下两行未被注释且值有效:
slowlog = /www/wwwlogs/php_slow.log
request_slowlog_timeout = 5s点击【保存】按钮,面板将自动重载 PHP-FPM 服务。若使用多版本 PHP,每个版本都要单独开,不能一劳永逸。
2. 手动配置文件修改
若手动配置,需编辑 pool.d/www.conf,确保配置写在 [www] 或 [www.conf] 配置段末尾,不能只写在全局 php-fpm.conf,否则不生效。同时建议启用 catch_workers_output = yes 以捕获更完整上下文,并设置 request_terminate_timeout = 300s 防止脚本卡死不退出。
注意事项
- 阈值设置:
request_slowlog_timeout值建议设为 2s~10s 之间,过小(如 0.1s)会导致日志爆炸式增长,过大(如 10s)可能漏掉真实瓶颈。线上可逐步放宽到 5s,别一上来就设 30s。 - 权限问题:日志路径需保证 php-fpm worker 进程有写权限,常被忽略,尤其用非 root 用户跑时,否则日志文件无法生成。/www/wwwlogs/php_slow.log 路径必须存在且 PHP 进程有写权限。
- 配置生效:改完一定要点「保存」→ 再点「重载配置」,否则不生效。先确认 PHP-FPM 是否读到了配置,检查该文件里 slowlog 行是否确实已启用。
参考来源
来源:宝塔面板官方教程 - 宝塔面板如何配置 PHP-FPM 慢日志?(2026 年 3 月 15 日)
来源:开发者社区 - PHP 怎么监控慢请求_slowlog 配置与日志分析【详解】(2026 年 3 月 19 日)
来源:阿里云开发者社区 - 配置 PHP-FPM 的 slowlog 记录执行过慢的 PHP 脚本日志 (2024 年 9 月 20 日)