当前位置:首页 > 文章列表 > 文章 > php教程 > PHP-FPM slowlog 怎样定位慢请求

PHP-FPM slowlog 怎样定位慢请求

来源:17golang原创 2026-11-12 00:30:30 0浏览 收藏

PHP-FPM slowlog 的定位思路不是“看到一条慢日志就改超时”,而是先让正确的 pool 生成 PHP 回溯,再把回溯里的脚本、函数和等待边界与 FPM 状态、应用请求日志对上。这样能回答两个问题:慢在哪里,以及它是否真的属于同一批慢请求。

官方地址:https://www.php.net/install.fpm.configuration

要点速览
  • request_slowlog_timeout 触发回溯,slowlog 决定写入位置,三者必须配置在实际接收请求的 pool。
  • slowlog 是定位工具,不是杀死请求的超时开关;终止请求要另看 request_terminate_timeout。
  • 用 FPM 状态页的 slow requests 和应用日志耗时交叉确认,避免把权限、路径或 pool 选错误判成代码慢。

一、先把 slowlog 配置到正确的 PHP-FPM pool

PHP-FPM 的全局配置和 pool 配置不是一回事。常见部署里,真正承载 Web 请求的是类似 www 的 pool,因此排查时要先确认正在编辑的文件确实被主配置包含。slowlog 最关键的三个参数如下:

参数作用定位时关注什么
request_slowlog_timeout请求超过该时长后写 PHP 回溯为排查临时设置,不能当作终止请求
slowlog慢请求日志文件路径父目录存在且 FPM worker 可写
request_slowlog_trace_depth回溯深度,默认值为 20递归较深时再按需调大
; 仅示例:把配置放在实际接收请求的 pool 中
request_slowlog_timeout = 3s
; 使用明确路径,便于与日志采集规则对应
slowlog = /var/log/php-fpm/www-slow.log
; 先保留默认深度,只有回溯不够时再增加
request_slowlog_trace_depth = 20

改完后先做配置语法检查,再按发行版方式平滑重载。这里不要直接把阈值设成极小值:慢日志会快速膨胀,也可能让正常的短暂外部等待淹没真正异常。

PHP-FPM pool 配置中 request_slowlog_timeout、slowlog 和 PHP worker 的静态关系说明图
图1:结构说明图,查看 PHP-FPM pool、慢日志参数与 PHP worker 之间的静态关系;这不是运行截图。

二、从慢日志堆栈还原慢请求位置

slowlog 写出的核心价值是 PHP backtrace,而不是只有一个脚本名。读取时先按时间段截取一组完整记录,再看入口脚本、当前函数和重复出现的调用边界。若多条记录都停在同一个数据库访问封装或 HTTP 客户端调用附近,优先把它当作等待点继续核对;不要仅凭最顶层文件名修改业务代码。

# 只读取最近一段记录,避免把历史噪声混进当前排查
sudo tail -n 120 /var/log/php-fpm/www-slow.log

# 先确认文件存在、属主和权限,再判断是否真的没有生成回溯
sudo stat /var/log/php-fpm/www-slow.log
sudo journalctl -u php-fpm --since "10 minutes ago"

一次慢请求可能在阈值附近产生回溯,但回溯本身不等于“这行代码就是根因”。把记录中的脚本路径、函数名和时间,与 Web 访问日志的 URL、状态码、耗时以及应用日志里的 request id 对齐,才能知道它是否对应同一个请求。

PHP-FPM 慢日志中的入口脚本、PHP 回溯、外部依赖与应用请求日志静态关系说明图
图2:结构说明图,查看入口脚本、PHP backtrace、外部依赖和应用日志之间的静态对应关系;这不是运行证据。

三、用 FPM 状态与应用日志交叉确认

如果 pool 开启了状态页,可以关注 slow requests、活动进程和等待队列等字段。slow requests 表示命中 request_slowlog_timeout 的请求累计数,它能帮助判断“慢日志是否在增长”,但不能单独告诉你是哪一个 URL 慢。

排查时建议建立一个很小的对照表:slowlog 记录时间对应 Web access log 的请求时间;入口脚本对应路由;回溯中的依赖调用对应应用日志的 request id;状态页的累计值只用于判断趋势。若 slowlog 有内容而应用日志没有对应请求,先检查时区、日志缓冲和采集延迟。

观察结果更可能的判断
slowlog 无文件且状态页计数不增长先查 pool 是否生效、路径和 worker 写权限
slowlog 有回溯,应用耗时也高按回溯中的重复调用继续查数据库、HTTP 或文件等待
slowlog 持续增长但请求已被终止slowlog 与终止机制独立,分别核对两个超时参数

四、常见问题与发布检查

为什么改了配置却没有 slowlog 文件?

最常见是改错 pool、主配置没有 include 该文件,或日志目录对 FPM worker 不可写。先从正在运行的 FPM 配置和服务日志确认加载结果,再查目录权限。

request_slowlog_timeout 会杀掉慢请求吗?

不会。它的职责是达到阈值后写 PHP 回溯;需要终止 worker 请求时,应单独评估 request_terminate_timeout,并确认这会带来什么回滚和数据一致性影响。

slowlog 阈值应该设多少?

按接口的正常耗时分布设一个能抓住异常、又不会制造海量日志的临时阈值。定位结束后恢复到团队约定,并保留一次配置变更记录。

发布前只需复核四项:配置落在正确 pool、日志路径可写、慢日志能与请求日志按时间或 request id 对齐、终止超时没有被误当成 slowlog。这样得到的才是一条可复查的慢请求定位链路。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Symfony Messenger 怎样选择异步传输Symfony Messenger 怎样选择异步传输
上一篇
Symfony Messenger 怎样选择异步传输
Java RecordComponent 怎样读取记录组件
下一篇
Java RecordComponent 怎样读取记录组件
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    986次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    991次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1112次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1083次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    928次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码