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プロセスと合計スレッド数を観察すると、奇妙な動作が見られます。

通常、Apache2プロセスは合計12~13個あります(ps aux | grep apache2 | wc -l)。1つを親プロセスと見なすと、子プロセスは約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 つと MaxRequestWorkers の 2 つのスレッド) に達します。

MaxRequestWorkers を 40 に設定してこれをテストしたところ、81 に達しました。

この Apache の動作を確認できる人はいますか?

PS 私は Apache2 を prefork として実行しています。つまり、ThreadLimit と ThreadsPerChild は使用されていないと思います。

関連情報