如何配置 PHP 慢日志 slowlog 分析具体哪行代码耗时

文章导读
配置 PHP 慢日志 slowlog 分析具体代码耗时的核心步骤是:首先编辑 PHP-FPM 配置文件(通常在 pool.d/www.conf 或宝塔面板配置修改处),启用 slowlog 参数指定日志路径,并设置 request_slowlog_timeout 阈值(建议 2-5 秒)。保存配置后必须重启 PHP-FPM 服务使其生效。随后通过访问页面触发慢请求,查看日志文件中的 script_
📋 目录
  1. A 宝塔面板如何开启 PHP 的慢日志排查卡顿_在 PHP-FPM 设置中配置 slowlog
  2. B 宝塔面板如何配置 PHP 慢日志?在宝塔面板中查找运行效率低下的脚本
  3. C 如何查看宝塔面板 PHP 慢执行日志排查网站卡顿_开启 slowlog 记录并分析执行超时的代码
  4. D PHP 怎么监控慢请求_slowlog 配置与日志分析【详解】
  5. E 配置 PHP-FPM 的 slowlog 记录执行过慢的 PHP 脚本日志 - 开发者社区 - 阿里云
  6. F PHP 性能调优---php-fpm 中启用慢日志配置 (用于检测执行较慢的 PHP 脚本)-阿里云开发者社区
  7. G FAQ
A A

配置 PHP 慢日志 slowlog 分析具体代码耗时的核心步骤是:首先编辑 PHP-FPM 配置文件(通常在 pool.d/www.conf 或宝塔面板配置修改处),启用 slowlog 参数指定日志路径,并设置 request_slowlog_timeout 阈值(建议 2-5 秒)。保存配置后必须重启 PHP-FPM 服务使其生效。随后通过访问页面触发慢请求,查看日志文件中的 script_filename 定位脚本,并根据调用堆栈背迹(backtrace)找到最底层的函数及行号,即为耗时瓶颈所在。需注意日志路径权限及配置是否在 pool 段内。

宝塔面板如何开启 PHP 的慢日志排查卡顿_在 PHP-FPM 设置中配置 slowlog

慢日志需手动启用并设阈值,配置须在 [www] 段内,改后必须重启 PHP-FPM 而非重载,用 usleep 超时测试并解析 script_filename、duration 及末行函数定位瓶颈。慢日志不是“开了就能立刻看到问题”,它只在请求真实超时后才写入,且默认配置基本是关闭的。必须手动启用 slowlog 并设好阈值,否则 tail -f /www/wwwlogs/php_slow.log 永远是空的。确认 PHP-FPM 配置段中已启用 slowlog 宝塔里每个 PHP 版本对应一个 FPM Pool 配置 (如/www/server/php/82/etc/php-fpm.d/www.conf),关键参数必须出现在 [www] 段内,不能写在全局或注释掉:slowlog = /www/wwwlogs/php_slow.log—— 路径需存在且 www 用户有写权限,别用/tmp 或挂载的 NFS 目录 request_slowlog_timeout = 5s—— 生产环境建议 3s~5s;设成 1s 会导致日志暴增,尤其 WordPress 后台 AJAX 请求容易误触发 catch_workers_output = yes—— 必须开启,否则 stderr 输出 (比如 error_log()、未捕获异常) 不会进慢日志 验证配置是否真正生效 改完点【保存】只是写入文件,PHP-FPM 不会自动重载。很多人卡在这步:以为保存了就 OK,结果日志一直不生成。必须点击 PHP 设置页右上角【重启】(不是【重载配置】),确保 php-fpm 进程完全重启 执行 ps aux | grep php-fpm,确认进程启动时间是修改后的时刻 用测试脚本触发慢请求:(注意是 usleep(5100000)= 5.1s,得略超阈值) 再跑 tail -n 10 /www/wwwlogs/php_slow.log,看到含 script_filename、duration 和多行 [0x 地址的块才算成功 解析慢日志时盯紧这三行 日志格式固定,但新手常忽略关键字段的位置关系:script_filename = /www/wwwroot/example.com/slow_test.php—— 这是入口文件,不是最慢的那行代码 duration = 5.102123—— 真实耗时,若远大于你设的阈值 (比如设 5s 却打出 12s),说明有阻塞 (如锁表、DNS 卡住) 紧贴在 script_filename 下方的连续几行 [0x—— 最底下那行函数名才是瓶颈点,比如 PDOStatement::execute 或 curl_exec,往上推是调用链,不是原因 慢日志只告诉你“哪次请求慢”和“最后停在哪”,不告诉你为什么慢——比如 mysqli_query 卡住,可能是没索引、锁表、或连接池耗尽。得结合 mysql-slow.log 和 iotop 交叉看,否则光看 PHP 慢日志容易误判。

宝塔面板如何配置 PHP 慢日志?在宝塔面板中查找运行效率低下的脚本

启用 PHP 慢日志可定位执行超时的低效脚本:需在宝塔面板 PHP 设置中配置 slowlog 路径、超时阈值及 catch_workers_output,重启生效;通过测试文件验证日志生成;分析 script_filename、duration 和 backtrace 定位瓶颈;结合性能监控与插件禁用法交叉确认并优化。如果您在使用宝塔面板托管的网站出现响应迟缓、CPU 占用异常升高或 PHP 进程频繁超时等问题,则很可能是某些 PHP 脚本执行时间过长。启用 PHP 慢日志可捕获执行时间超过阈值的脚本路径、耗时及调用堆栈。以下是配置 PHP 慢日志并定位低效脚本的具体步骤:一、开启 PHP 慢日志功能 慢日志由 PHP-FPM 内置模块提供,需在对应 PHP 版本的配置中启用,其原理是让 PHP-FPM 监控每个请求的执行时间,当超过设定阈值时,将详细信息写入指定日志文件。1、登录宝塔面板,进入【网站】→【PHP 管理】,选择您正在使用的 PHP 版本 (如 PHP 8.0),点击【设置】。2、切换到【配置修改】选项卡,在配置文件中查找 slowlog 相关行,若已注释则取消注释;若不存在,则在 [www] 或 [www.conf] 配置段末尾添加以下三行:slowlog = /www/wwwlogs/php_slow.log request_slowlog_timeout = 5s request_terminate_timeout = 300s 3、确认 catch_workers_output = yes 已启用 (用于捕获 stderr 输出,有助于记录更完整上下文)。4、点击【保存】,随后返回 PHP 管理页面,点击【重启】使配置生效。

如何查看宝塔面板 PHP 慢执行日志排查网站卡顿_开启 slowlog 记录并分析执行超时的代码

宝塔面板开启 PHP slowlog 需手动配置对应 PHP 版本的 php-fpm.conf:取消 slowlog 和 request_slowlog_timeout 行注释,设超时为 2s,保存后重载配置;多版本需逐个设置,且 PHP 7.4+ 默认不统计 IO 阻塞时间。宝塔面板里怎么开启 PHP 的 slowlog 功能 宝塔默认不开启 PHP 慢日志 (slowlog),所以你看到网站卡顿、CPU 飙高,却找不到具体哪段代码在拖后腿。必须手动启用 slowlog,且只对当前使用的 PHP 版本生效 (比如你用的是 PHP 7.4,就得单独配它)。操作路径:宝塔面板 → 软件商店 → 找到对应 PHP 版本 → 设置 → 配置修改 → 搜索 slowlog 关键字,在 php-fpm.conf 区域找到以下两行并取消注释 (删掉前面的分号): 复制 AI 写代码 1 2 slowlog = /www/wwwlogs/php_slow.log request_slowlog_timeout = 2s 注意:request_slowlog_timeout 值别设太小 (比如 0.1s),否则日志爆炸;也别设太大 (比如 10s),可能漏掉真实瓶颈。2s 是较稳妥的起点,按业务响应预期调整即可。/www/wwwlogs/php_slow.log 路径必须存在且 PHP 进程有写权限 (宝塔通常已自动处理) 改完一定要点「保存」→ 再点「重载配置」,否则不生效 如果用了多版本 PHP,每个版本都要单独开,不能“一劳永逸”为什么开了 slowlog 却没生成日志文件 最常见原因是 PHP-FPM 进程没真正加载新配置,或者日志路径被 SELinux/权限拦截 (尤其 CentOS 7+ 或自定义安全加固环境)。先确认 PHP-FPM 是否读到了配置:复制 AI 写代码 1 ps aux | grep php-fpm 看输出中是否有-y /www/server/php/74/etc/php-fpm.conf 类似路径 (数字 74 对应 PHP 7.4),再检查该文件里 slowlog 行是否确实已启用。ColaOS 首个有灵魂的智能体操作系统 下载 若进程显示的是旧配置路径,说明「重载配置」失败,要手动执行 systemctl reload php-fpm-74(把 74 换成你实际版本) 若日志路径是/www/wwwlogs/,但该目录属主不是 www,PHP 进程会静默失败,用 ls -ld /www/wwwlogs/查归属,必要时 chown www:www /www/wwwlogs/ 部分宝塔低版本 (如 7.4.x 之前) 在「配置修改」页改完不会同步写入 php-fpm.conf,需手动编辑该文件确认 从 slowlog 日志里快速定位问题代码 日志格式固定,关键信息是「脚本路径 + 执行耗时 + 调用栈」。典型一行长这样:复制 AI 写代码 1 2 3 4 [28-May-2024 14:22:31] [pool www] pid 12345 script_filename = /www/wwwroot/example.com/index.php [0x00007f8b1c0a1234] curl_exec() /www/wwwroot/example.com/inc/api.php:87

PHP 怎么监控慢请求_slowlog 配置与日志分析【详解】

php-fpm slowlog 能抓到 PHP 脚本执行阶段的慢请求,但不包括 Nginx 耗时、网络延迟或数据库连接建立时间;需同时配置 slowlog、request_slowlog_timeout(建议从 2s 起调) 和 request_terminate_timeout,并确保路径可写、配置在 pool 段且重载生效。php-fpm slowlog 是什么,它真能抓到慢请求吗 能,但只抓 PHP 脚本执行阶段的慢操作,不包括 Nginx 等前置代理耗时、网络延迟或数据库连接建立时间。它的触发条件是:单个请求在 php-fpm 进程内执行超过 request_slowlog_timeout 设定的秒数 (比如 5s),且该进程已启用 slowlog 配置。常见错误现象:slowlog 文件空、日志里全是重复的同一行、或者根本没生成日志文件——大概率是配置没生效,或超时阈值设得太高 (比如 30s),实际卡顿都在 8–12s,完全漏掉。必须确保 php-fpm.conf 或 pool 配置中同时设置了 slowlog(日志路径) 和 request_slowlog_timeout 路径需保证 php-fpmworker 进程有写权限 (常被忽略,尤其用非 root 用户跑时) 超时值建议从 2s 开始调,线上可逐步放宽到 5s,别一上来就设 30s 怎么配 slowlog:关键三行不能少 不是加个 slowlog = /var/log/php-fpm-slow.log 就完事。它依赖两个配套参数才能触发记录,缺一不可。slowlog = /var/log/php-fpm-slow.log—— 日志绝对路径,目录需存在且可写 request_slowlog_timeout = 2s—— 触发阈值,单位支持 s 和 ms(如 500ms) request_terminate_timeout = 0(可选但推荐)—— 防止脚本卡死不退出,干扰 slowlog 判断 注意:request_slowlog_timeout 必须写在 pool 段 (如 [www] 下),不能只写在全局 php-fpm.conf;否则不生效。

如何配置 PHP 慢日志 slowlog 分析具体哪行代码耗时

配置 PHP-FPM 的 slowlog 记录执行过慢的 PHP 脚本日志 - 开发者社区 - 阿里云

在 PHP-FPM 中,slowlog 和 request_slowlog_timeout 是两个用于识别和记录执行缓慢的 PHP 脚本的配置选项。通过合理配置这两个参数,可以显著提高 PHP 应用的性能优化工作。slowlog:这是一个字符串参数,用于指定慢执行脚本的日志文件路径。当脚本执行时间超过 request_slowlog_timeout 指定的阈值时,其调用堆栈将被记录到这个文件中。例如,设置 slowlog = /var/log/php5/slow.log 会将慢日志记录到/var/log/php5/slow.log 文件中。request_slowlog_timeout:这是一个时间参数,用于定义脚本执行的超时阈值。当脚本执行时间超过这个值时,将触发慢日志记录。默认情况下,这个值可能设置为 0,意味着此功能是关闭的。你可以设置一个值,如 10s(10 秒),来开启这个功能,例如 request_slowlog_timeout = 10s。配置这两个参数的步骤通常包括:打开 PHP-FPM 的配置文件,通常位于/etc/php/版本/fpm/pool.d/www.conf。找到或添加 slowlog 和 request_slowlog_timeout 配置行,并设置适当的值。重启 PHP-FPM 服务以应用更改。一旦配置并启用了慢日志,你就可以通过分析慢日志文件来识别执行缓慢的脚本和函数调用。这有助于开发者优化代码,提高应用程序的性能。此外,记得在调试和优化完成后关闭慢日志记录,因为它可能会对性能产生一定影响,并且会随着时间的推移占用越来越多的磁盘空间。

PHP 性能调优---php-fpm 中启用慢日志配置 (用于检测执行较慢的 PHP 脚本)-阿里云开发者社区

简介:虽然通过 nginx accesslog 可以记录用户访问某个接口或者网页所消耗的时间,但是不能清晰地追踪到具体哪个位置或者说函数慢,所以通过 php-fpm 慢日志,slowlog 设置可以让我们很好的看见哪些 php 进程速度太慢而导致的网站问题 php-fpm. 虽然通过 nginx accesslog 可以记录用户访问某个接口或者网页所消耗的时间,但是不能清晰地追踪到具体哪个位置或者说函数慢,所以通过 php-fpm 慢日志,slowlog 设置可以让我们很好的看见哪些 php 进程速度太慢而导致的网站问题 php-fpm.conf 的配置文件中有一个参数 request_slowlog_timeout 是这样描述的 ; The timeout for serving a single request after which a PHP backtrace will be ; dumped to the 'slowlog' file. A value of '0s' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 ; request_slowlog_timeout = 0 当 request_slowlog_timeout 设为一个具体秒时 request_slowlog_timeout =1,表示如果哪个脚本执行时间大于 1 秒,会记录这个脚本到慢日志文件中 request_slowlog_timeout =0 表示关闭慢日志输出。慢日志文件位置默认在 php 的安装目录下的 log 文件夹中,可以通过修改 slowlog = log/$pool.log.slow 参数来指定。; The log file for slow requests ; Default Value: not set ; Note: slowlog is mandatory if request_slowlog_timeout is set ; slowlog = log/$pool.log.slow php-fpm 慢日志的例子,慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长。[27-May-2016 13:20:37] NOTICE: child 16683 stopped for tracing [27-May-2016 13:20:37] NOTICE: about to trace 16683 [27-May-2016 13:20:37] NOTICE: finished trace of 16683 [27-May-2016 13:20:37] WARNING: [pool www] child 16720, script '/Data/webapps/test/public/index.php' (request: "POST /index.php/test/test/") executing too slow (1.204894 sec), logging request_slowlog_timeout 和 slowlog 需要同时设置,开启 request_slowlog_timeout 的同时需要开启 slowlog,慢日志路径需要手动创建 具体开启 php-fpm 慢日志步骤:cd /apps/php vi /apps/php/etc/php-fpm.conf 去掉 request_slowlog_timeout、slowlog 的前缀分号';',设置 request_slowlog_timeout =1; :wq 保存退出创建慢日志目录 mkdir -p /apps/php/etc/log 重启 php-fpm killall php-fpm /apps/php/sbin/php-

FAQ

为什么开启了 slowlog 但日志文件是空的?

如何配置 PHP 慢日志 slowlog 分析具体哪行代码耗时

可能是因为配置未生效(未重启 PHP-FPM)、阈值设置过高导致没有请求超时、或者日志路径权限不足导致 PHP 进程无法写入。

request_slowlog_timeout 阈值设置多少合适?

生产环境建议设置为 3 秒到 5 秒,调试时可设为 1 秒到 2 秒。设置过小会导致日志量过大,设置过大可能漏掉性能瓶颈。

修改配置后是重载还是重启 PHP-FPM?

如何配置 PHP 慢日志 slowlog 分析具体哪行代码耗时

必须重启 PHP-FPM 服务,仅重载配置可能不会生效,特别是宝塔面板中需点击【重启】按钮确保进程完全重新加载配置。

slowlog 能记录数据库慢查询吗?

不能直接记录 SQL 语句,它只记录 PHP 脚本执行堆栈。若瓶颈在数据库,需结合 MySQL 慢查询日志一起分析才能定位具体 SQL 问题。