Nginx和PHP-FPM来自同一IP的并发请求

Nginx和PHP-FPM来自同一IP的并发请求

我无法处理来自同一 IP 的并发耗时请求。

  • 第一个请求应该需要 6 分钟才能响应(这是正常现象,我的问题不是关于减少响应时间)
  • 第二个请求的响应时间应少于 100 毫秒。

发生的情况是,服务器正在等待第一个请求完成后再发送第二个请求响应。

我的配置是具有 2 个 vCores 的 AWS EC2(我相信这对于处理并发计算很有用)。

请求经过 Nginx 服务器,到达 php-fpm 进程。我以为问题是我错误配置了 PHP-FPM。然而,在阅读了信息后,这是我的 php-fpm 配置:

$ cat www.conf | grep max_children     
;   static  - a fixed number (pm.max_children) of child processes;
;             pm.max_children      - the maximum number of children that can
;             pm.max_children           - the maximum number of children that
pm.max_children = 5

$ cat www.conf | grep start_servers    
;             pm.start_servers     - the number of children created on startup.
pm.start_servers = 2

$ cat www.conf | grep min_spare_servers
;             pm.min_spare_servers - the minimum number of children in 'idle'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers = 1

$ cat www.conf | grep max_requests     
;pm.max_requests = 500

$ cat www.conf | grep max_children     
;   static  - a fixed number (pm.max_children) of child processes;
;             pm.max_children      - the maximum number of children that can
;             pm.max_children           - the maximum number of children that
pm.max_children = 5

我遗漏了什么?我应该在哪里调试该行为?

如果您需要更多信息来帮助我,请随时在评论中告诉我,我只是一个初级人员......

谢谢大家,祝大家周末愉快

答案1

您运行的 PHP 工作者数量确实很少,因此可能是第一个请求使用所有可用的工作者来完成,因此第二个请求被阻止。

尝试以下设置:

pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3

实际有用的数字取决于您的实际流量。基本上,max_children是可以同时处理单个请求的最大可用工作器数量,您需要有一个与您的流量相匹配的适当值。

相关内容