nginx php-fpm配置命中儿童限制

时间:2017-01-10 15:01:28

标签: php nginx fpm

我在使用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观察CPU使用情况。

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

为什么使用CPU太多了?如何从php-fpm获取WARNING?

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

感谢。

1 个答案:

答案 0 :(得分:3)

您不仅可以考虑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有利于   每秒请求可能不是最好的事情。   当然,我对您的网站及其使用方式一无所知   for,或者是否需要SSL,但SSL确实有   对您的谷歌排名的影响。它总是最小化,如果是   SSL,如果我是你,我会保留它。