我在使用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?
我做错了什么?请指导我。
感谢。
答案 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,如果我是你,我会保留它。