
我最近將我的 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 未使用恕我直言。