PHP 502 错误原因请教

2021 年 3 月 25 日
 sadfQED2

个人理解,当 php-fpm 的任务队列达到 listen.backlog 配置的上限的时候,这个时候新任务无法加入 php-fpm 的任务队列就会出现 502 错误。

因此我做了实验:将 php-fpm 设置为 static 模式(pm=static),进程数设置为 1 (pm.max_children=1),任务队列设置为 100 (listen.backlog=100),使用 3000 并发进行请求。

php 代码


usleep(100000); // 暂停 100 毫秒

echo "success";

预期:因为只有一个 fpm 进程,因此第一个请求被 fpm 接收后,后面 100 个请求将占满任务队列,因此应该成功 101 个请求,再后面所有的请求就都应该出现 502 错误。

实际:成功了 113 个请求,其他全部为 502 错误(实验了很多次,都是这个结果)。

猜想:nginx 在请求 php-fpm 的时候可能也有一个任务队列,这个队列会等待 php-fpm 的任务队列空闲,然后插入任务。

提问:nginx 在请求 php-fpm 前是否真的有一个缓冲队列?如果有,这个队列是否有相关配置项?如果没有,为什么我实验中会出现 113 个成功请求,而不是 101 个成功。

是否有大佬讲一讲,或者给个关键词也行,感谢

581 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/765097

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX