2

我有一个 64gb RAM 的服务器,使用 apache + fastcgi 连接到 php-fpm。

我正在使用 ApacheBench 运行一些负载测试。500k 请求,200 请求/秒(目标是每台服务器 10k/秒)。我不断收到“池似乎很忙错误”,并且不知道如何正确配置 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

阿帕奇配置:

<IfModule worker.c>
StartServers         2048
ServerLimit     8175
MaxClients         8175
MinSpareThreads    2048
MaxSpareThreads     2048
ThreadsPerChild     25
MaxRequestsPerChild  8000
</IfModule>

我究竟做错了什么?

4

1 回答 1

0

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

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

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

于 2012-08-19T02:22:12.547 回答