💡
原文中文,约1800字,阅读约需5分钟。
📝
内容提要
在一台服务器上,服务 A 通过 Nginx 请求服务 B,偶尔出现 504 超时和 502 断开。分析发现是由于 TCP 连接数过高。通过优化 PHP-FPM 配置,调整 backlog 和 max_children 参数后,压力测试显示服务稳定,成功处理 3000 并发请求。
🎯
关键要点
- 在一台线上服务器上,服务 A 通过 Nginx 请求服务 B,偶尔出现 504 超时和 502 断开。
- 分析发现,超时现象与 TCP 连接数过高有关,曾超过 900。
- PHP-FPM 配置中,pm.max_children 和 backlog 参数需要优化。
- 建议将 backlog 设置为 4500,max_children 调整至 400,max_requests 设定为 25000。
- 通过压力测试,优化后的配置在 3000 并发请求下服务稳定,成功处理所有请求。
- 合理配置 PHP-FPM 参数和优化 TCP 连接处理机制可以有效避免超时现象。
❓
延伸问答
PHP-FPM 504 超时问题的主要原因是什么?
主要原因是 TCP 连接数过高,曾超过 900,导致请求无法正常处理。
如何优化 PHP-FPM 的配置以解决超时问题?
建议将 backlog 设置为 4500,max_children 调整至 400,max_requests 设定为 25000。
在压力测试中,优化后的 PHP-FPM 配置表现如何?
在 3000 并发请求下,服务稳定无超时,成功处理所有请求。
TCP 连接数过高会导致什么问题?
会导致新的连接无法建立,造成请求超时现象。
如何设置系统级别的 TCP 连接队列大小?
可以通过命令或配置文件将 somaxconn 设置为 4000。
PHP-FPM 的 pm.max_children 参数有什么作用?
pm.max_children 决定了同时可以处理的请求数,影响服务的并发能力。
➡️