nginx php-fpm 配置达到子限制

nginx php-fpm configuration hitting children limit

我在使用 nginx + php7.0-fpm 时遇到了这个问题。

测试是在未安装其他服务的纯 php 服务器上完成的。

我收到以下警告。

WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 35 total children

而且它会大大降低服务器速度。

我正在使用 AWS t2.medium instance - 2vCPU 和 4GB 内存。

我的 php7.0-fpm/www.conf 设置看起来像

pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm.max_requests = 500

我有一个 laravel 应用程序,我正在使用它来测试它只是回复 {"m":"OK"} 请求。

我使用 apache2-utils

进行了测试
ab -n 1000 -c 50 https://mytestserver.com/

来自 ab 测试的响应 -> https://ghostbin.com/paste/528tw

我使用 htop 观看 CPU 用法。

ab 测试期间,两个 CPU 用法很快达到 100%。但是,内存使用率仅为 400MB.

为什么使用 CPU 太多了?我该怎么做才能从 php-fpm 收到警告?

我做错了什么?请指导我。

谢谢。

您不仅可以考虑 PHP 的内存使用情况,还可以考虑并发的 CPU 使用情况。

如果你有太多的子服务器,它只会让事情变得更糟和更慢,而且 PHP 无法处理更多的请求,它可以完全阻止一切。

您的服务器只有 2 vCPUs 的内存有点太多,或者相反,它应该有更多 CPU 以适应内存量。

这更适合 2 个虚拟 cpu 内核:

pm = dynamic
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 500

另外当你用Apache的Benchmark工具做50个并发请求时,只有2台vCPU服务器很慢是完全正常的。基准应 运行 来自另一台计算机。

请记住,基本 OS 和您的网络服务器 (nginx) 也需要一些 CPU 用法。

您的 AWS 服务器的性能与 RaspberryPi 大致相同,但内存稍多一些。

来自 Mjh 的有用评论:

100 requests a second isn't bad, if you get to a point where you have that much - that's a great problem to have. Dropping SSL in favor for requests per seconds might not be the best thing to do at this point. Of course, I don't know anything about your site and what you use it for, or whether SSL is needed or not, but having SSL does have an impact on your google ranking. It's always min-maxing, and in case of SSL, if I were you, I'd keep it.