php-fpm“池似乎很忙”。我为什么要这个?

时间:2012-08-18 23:59:31

标签: php-5.3 php

我有一个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>

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我最初的直觉反应是,除非你的每个请求有很多等待时间,否则最多有8000个孩子似乎要运行很多进程。一段时间后,大量进程实际上会导致性能下降,因为上下文切换最终会将正在运行的进程交换进出CPU时间,这需要时间。除非你有很多外部服务调用进程等待很多,这似乎有点过分。此外,假设在请求过程中分配了20 MB,您使用60%以上的可用内存只是为了服务start_servers。

至于“游泳池似乎很忙”的错误,我不知道随便。在没有深入了解环境的情况下说(对我来说)很难。当您运行AB时,您的可用CPU时间和内存利用率是多少?

我也想知道单个进程(如FPM)可以打开的连接数是否存在系统限制...检查ulimit -a