PHP + FastCGI; Apache仅在超时后发送请求

问题描述

摘要

  • 为什么Apache-> FastCGI有时会等到它“超时”,然后再向PHP发送请求?
  • 执行此操作时,为什么请求的正文为空?
  • 我们的假设:尚未完全收到用户的请求-那么我们可以捕获它并提早拒绝吗?

详细信息

我们有一个简单的Apache-> FastCGI(通过代理)-> PHP设置。

我们看到的是,在极少数情况下,会发生以下情况:

  • T + 0s:服务器接听电话(与Apache日志中记录的一样)
  • T + 20.001s:FastCGI记录一个超时(这是根据配置的正确超时)
  • T + 20.0011s:PHP开始处理该调用,但正文内容file_get_contents('php://input')为空
  • T + 20.006s:PHP记录调用已在内部完成,在高峰时需要0.005秒和509KB的内存。

这既不是时间也不是内存(所有相关的错误以及详细信息都被记录下来了

  • 我们知道PHP直到超时后才开始处理调用。
  • 增加PHP内存不是解决方案; PHP的内存不足(峰值为509KB)
  • 增加任何超时都不是解决方案; PHP不会花费太长时间(通常在5毫秒或更短的时间内完成调用),如果I / O未能在20秒内完成,则我们的应用程序将抱怨。

我们的目标是在未及时收到呼叫的情况下更好地处理I / O。

这个问题大约每2/3分钟一次,而每秒处理500个以上的呼叫。因此,这种情况很少见,但会影响用户。

其他因素:

  • 呼叫的输入长度应该没有实质性的差异。
  • Apache 2.4 / PHP 7.4
  • 通过HTTPS发送(可能是SSL解码问题?)发送到AWS Load Balancer(可能是AWS?),但是服务器仅接收HTTP(服务器上没有解码)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...