
最近、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 は使用されていないと思います。