为什么 Apache2 总线程数大于 MaxRequestWorkers

为什么 Apache2 总线程数大于 MaxRequestWorkers

我最近将我的 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 未被使用。

相关内容