You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

php-fpm的www-error.log中出现Generic Error日志的原因是什么?

问题现象
  • 错误日志路径:/var/log/php-fpm/www-error.log
  • 不定期输出日志内容:
[27-Jun-2022 12:36:39 UTC] Generic Error
  • 出现时机:执行sudo yum update升级Amazon Linux 2软件栈后开始出现,业务代码未主动抛出该字符串错误,所有业务逻辑运行正常,未使用第三方开发框架,上层业务代码为自主编写。
  • 环境信息:
    • PHP-FPM版本:PHP 7.4.19 (fpm-fcgi)(构建时间2021-05-13),搭载Zend Engine v3.4.0
    • 系统内核版本:4.14.200-155.322.amzn2.x86_64
    • 系统发行版:Amazon Linux 2,二进制兼容CentOS/RHEL/Fedora生态
具体触发原因

该日志由两个因素共同触发:

  1. Amazon Linux 2源2022年中推送的php-7.4.19软件包补丁缺陷:该版本PHP的错误处理逻辑被发行版打包方加入了自定义补丁,当触发的错误实例消息字段为空时,官方原版逻辑会跳过该类无明确信息的错误不写入日志,而该补丁会自动填充Generic Error作为默认消息写入错误日志。
  2. 请求生命周期结束后的上下文丢失错误:这类无消息的低级别错误通常来自两个场景:
  • 代码调用fastcgi_finish_request()提前向客户端返回响应后,后续后台执行的逻辑触发了warning/notice/deprecated级别的错误,此时请求上下文已经被释放,PHP无法获取错误对应的文件、行号、具体提示内容,生成空消息的错误实例
  • 客户端主动断开连接(如用户关闭页面、前端请求超时断开)后,服务端PHP进程继续执行剩余逻辑时触发低级别错误,同样会丢失错误上下文,生成空消息错误

这类错误属于无危害的低级别提示,不会中断请求执行,因此业务侧不会感知到异常。

排查与修复方案
  • 定位具体触发点:在项目入口文件注册shutdown回调,打印完整错误结构到独立日志:
register_shutdown_function(function() {
    $err = error_get_last();
    if ($err) {
        file_put_contents('/tmp/php_full_error.log', print_r($err, true), FILE_APPEND);
    }
});

获取到错误的type字段后,可对应PHP错误级别常量定位触发位置,高频触发点为fastcgi_finish_request()之后执行的数据库连接隐式关闭、curl短连接释放、临时文件写入等操作触发的无提示warning。

  • 彻底消除日志:执行sudo yum update php升级到Amazon Linux 2源内7.4.30及以上版本的PHP包,后续打包版本已经移除了该异常补丁,空消息的低级别错误不会再写入fpm错误日志。
  • 临时规避方案:修改php-fpm的www.conf配置,过滤低级别错误写入:
php_admin_value[error_reporting] = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED

配置修改后执行sudo systemctl restart php-fpm即可生效。

内容的提问来源于stack exchange,提问作者julius patta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:09:17