首页 > 解决方案 > php-fpm 进程停留在“获取请求信息”状态

问题描述

我的网络服务器遇到了 php-fpm 活动进程缓慢增加的问题,直到达到 pm.max_children 设置,此时它卡住了,我需要重新启动 php-fpm。(操作系统:ubuntu 20.0.4,网络服务器:Caddy,php-fpm 版本:7.1,pm = 动态,运行 Laravel 5.5 框架)

我启用了 php-fpm 状态页面,发现很多进程都停留在“获取请求信息”状态。输出中的示例行: of /status?html&full (这已经在这里停留了一个多小时)

PID 状态 开始时间 从开始 要求 请求持续时间 请求方法 请求 uri 内容长度 用户 脚本 最后一次请求 cpu 最后请求内存
1772235 获取请求信息 2021 年 6 月 24 日:15:03:07 +0000 5111 131 4625314443 邮政 /api.php?t=removed&e=/role/checkOut/3461 5542139 - /var/www/nameremoved/app/fe/production/api.php 0.00 0

谁能阐明“获取请求信息”状态是什么?我似乎无法找到它记录的任何地方。

在 php.ini 中我有: max_execution_time = 180 然而这似乎被忽略了。正在运行的脚本来自 Laravel 5.5,绝对不应该花费超过几秒钟的时间来执行 - 它们只是基本的数据库操作,可能是文件最大可上传 500MB

我想我的下一步可能是设置 php-fpm 设置:request_terminate_timeout 并查看是否会终止进程。

奇怪的是我在不同的位置设置了一个相同的服务器(请求根据位置路由到任一服务器),它没有这个问题。

任何建议表示赞赏:)

更新 25/6 仍在发生,它似乎仅适用于带有文件上传的 POST 请求

更新 29/6 我已经设置 request_terminate_timeout=2h 这成功地杀死了停留在“获取请求信息”状态的请求。所以这有点解决了问题,但我仍然不知道是什么原因造成的

标签: phpphp-7.1

解决方案


我对 Ubuntu 20.04.3 LTS、Laravel 8、php-fpm 7.4 和 caddy 2.4.5 有相同的行为。

重新启动 caddy 或 php-fpm 服务会立即释放进程。所以我首先通过 crontab 每 15 分钟重新启动一次 caddy 来快速“修复”它。

由于 nginx 不会发生这种情况,我现在正在运行 caddy -> nginx -> php-fpm,到目前为止它可以工作。


推荐阅读