我有一个64GB RAM的服务器,使用apache + fastcgi连接到php-fpm。
我正在使用ApacheBench运行一些负载测试。 500k reqs,200 reqs / sec(目标是每服务器10k / sec)。我一直得到“池似乎很忙”的错误,并且如何正确配置fpm以处理甚至200reqs / sec。感觉就像我错过了一些明显的东西。
FPM-配置:
pm = dynamic
pm.max_children = 8192
pm.start_servers = 2048
pm.min_spare_servers = 2048
pm.max_spare_servers = 2048
pm.max_requests = 8000
apache config:
<IfModule worker.c>
StartServers 2048
ServerLimit 8175
MaxClients 8175
MinSpareThreads 2048
MaxSpareThreads 2048
ThreadsPerChild 25
MaxRequestsPerChild 8000
</IfModule>
我做错了什么?
答案 0 :(得分:0)
我最初的直觉反应是,除非你的每个请求有很多等待时间,否则最多有8000个孩子似乎要运行很多进程。一段时间后,大量进程实际上会导致性能下降,因为上下文切换最终会将正在运行的进程交换进出CPU时间,这需要时间。除非你有很多外部服务调用进程等待很多,这似乎有点过分。此外,假设在请求过程中分配了20 MB,您使用60%以上的可用内存只是为了服务start_servers。
至于“游泳池似乎很忙”的错误,我不知道随便。在没有深入了解环境的情况下说(对我来说)很难。当您运行AB时,您的可用CPU时间和内存利用率是多少?
我也想知道单个进程(如FPM)可以打开的连接数是否存在系统限制...检查ulimit -a