3

我在使用 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 RAM。

我的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.

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

为什么CPU占用太多?我该怎么做才能从 php-fpm 获得警告?

我究竟做错了什么?请指导我完成。

谢谢。

4

1 回答 1

4

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

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

您的服务器对于只有 2 个 vCPU 的内存有点过多,或者相反,它应该有更多的 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 服务器非常慢是完全正常的。基准测试应该在不同的计算机上运行。

请记住,基本操作系统和您的网络服务器 (nginx) 也需要一些 CPU 使用率。

您的 AWS 服务器与具有更多内存的 RaspberryPi 具有大致相同的功能。

来自Mjh的有用评论:

每秒 100 个请求还不错,如果你达到了拥有那么多请求的地步——这是一个很大的问题。在这一点上,放弃 SSL 以支持每秒请求数可能不是最好的做法。当然,我不知道您的网站以及您使用它的目的,或者是否需要 SSL,但拥有 SSL 确实会对您的谷歌排名产生影响。它总是最小化,如果是 SSL,如果我是你,我会保留它。

于 2017-01-10T15:27:20.253 回答