為什麼 Apache2 總線程數超過 MaxRequestWorkers

為什麼 Apache2 總線程數超過 MaxRequestWorkers

我最近將我的 mpm 從 perfork 移至 event (以及 mod_php (php7.0) 至 php-fpm (proxy_fgi)) 我估計我的最大並發連接負載約為 300。

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 我正在將 Apache2 作為 prefork 運行,即 ThreadLimit 和 ThreadsPerChild 未使用恕我直言。

相關內容