php - 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 这成功地杀死了停留在“获取请求信息”状态的请求。所以这有点解决了问题,但我仍然不知道是什么原因造成的
解决方案
我对 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,到目前为止它可以工作。
推荐阅读
- wiremock - 可以将wiremock json存根设置为在命中端点时运行我自己的脚本吗?
- c# - C# 进度条在下载时不更新
- c# - Visual Studio 如何确定项目的 C# 版本以及它存储在哪里?
- linkedin - 如何获取具有 r_ads_gen_automation 权限的 OAuth 2.0 访问令牌以访问公司页面的 LinkedIn 潜在客户?
- java - 在我的应用程序中执行命令
- java - Appium Desktop 1.6.1> IOS> java: running desired capabilities gives bad
- c++ - Boost asio async_receive/write don`t receive/send package correctly. after 0x00 will write 0xfe
- python - How can I delete duplicates in a Python list
- python - New df column that is current df1 value divided by df2 value
- c# - 找不到 MvxAndroidApplication