我最近将我的 mpm 从 perfork 移到了 event(同时将 mod_php(php7.0)移到了 php-fpm(proxy_fgi))。我估计我的最大并发连接负载约为 300。因此我在 mpm_event.conf 中设置了以下配置
StartServers 5
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 35
MaxRequestWorkers 350
MaxConnectionsPerChild 0
现在,当我使用 ps 观察 apache2 进程和总线程数时,我看到了一些奇怪的行为
通常我总共有 12-13 个 apache2 进程(ps aux | grep apache2 | wc -l
)。考虑到其中一个是父进程,所以它大约有 10-11 个子进程。此外,如果我看到来自 apache2 的总线程数
ps -o nlwp $(pidof apache2) | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
我观察 408 个线程很长时间了。所以我的问题是:
- 线程总数怎么可能超过 MaxRequestWorkers (350)
- 子进程总数怎么可能超过 StartServers (5)
- 408 的原因是什么?(12*34?)我的流量是否达到极限?
提前感谢您的帮助
答案1
我观察到了类似的行为。使用默认的 MaxRequestWorkers 150,我最多可以达到 301 个线程 - 即 1 个父线程和 2* 个 MaxRequestWorkers 线程。
我通过将 MaxRequestWorkers 设置为 40 来进行测试,结果达到了 81。
有人能证实这个 Apache 行为吗?
PS 我正在以 prefork 的形式运行 Apache2,也就是说,在我看来,ThreadLimit 和 ThreadsPerChild 未被使用。