PHP-FPM 設定和 mpm_worker (Apache) 之間的關係

PHP-FPM 設定和 mpm_worker (Apache) 之間的關係

我有一個在以下設定上運行 Magento 的網站:

  • Apache 2.4 與 mpm_worker
  • PHP-FPM
  • 伺服器總 RAM:14GB(10GB 可用於 Apache/PHP)

每個 PHP-FPM 進程消耗大約 80MB 的 RAM。

我想微調 PHP-FPM 和 mpm_worker 的設定。閱讀文件後,我對 PHP-FPM 和 mpm_worker 中的選項之間的關係有點困惑。

例如,PHP-FPM 具有以下配置:pm.min_spare_serverspm.max_spare_serverspm.start_serversmax_children。我了解這些選項對於 PHP-FPM 的含義。

但是,mpm_worker 具有以下配置:MinSpareThreadsMaxSpareThreads和 。再次,與 mpm_worker 隔離,我了解他們的作用。StartServersThreadLimit

我的問題是:這些配置如何相互關聯?假設我設定了StartServers=2ThreadsPerChild=25。對於 Apache/mpm_worker,這將為我提供 50 個線程。如果我隨後設置pm.start_servers = 50,PHP-FPM 最初將產生 50 個進程。

那麼這50個「Apache」執行緒和50個「PHP-FPM」進程之間有什麼關係呢?每個 Apache 執行緒是否使用一個 PHP-FPM 進程?

我希望有人能夠對此提供一些見解。

謝謝!

答案1

Apache 使用子執行緒來處理來自客戶端的請求,但它只會為 php 檔案呼叫 PHP-FPM - 映像、css 和 js 應直接從 Apache 提供,因此不會消耗 PHP-FPM 執行緒。

PHP-FPM 有多個沒有子執行緒的執行緒 - 每個執行緒都服務於來自 Apache 的請求。

AFAIK,如果您沒有在 Apache 中設定 KeepAlive,來自同一客戶端的多個請求(載入頁面、映像、CSS 和 js)應該消耗多個執行緒。請參閱此連結有關 KeepAlive 的更多資訊。

我最近自己在調整 Apache 伺服器,發現如果有多個核心,最好增加每個執行緒的子級數量。

答案2

該關係是動態映射的。它們是單獨的進程,也可以在單獨的伺服器下運行,因此您有很多配置選項。

Apache 進程/執行緒處理初始連接,然後使用 php-fpm 進程解析 PHP 檔案以傳回請求。

這裡有很多變數可以建議您如何配置哪些變量,但通常會配置 apache,以便它有足夠的線程來即時處理請求,並配置 php-fpm,以便您的 PHP 腳本/網站有足夠的記憶體來運行。對於各種可能的快取選項,這只能透過對正在運行的系統進行基準測試來決定。

相關內容