%20%E4%B9%8B%E9%96%93%E7%9A%84%E9%97%9C%E4%BF%82.png)
我有一個在以下設定上運行 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_servers
、pm.max_spare_servers
、pm.start_servers
和max_children
。我了解這些選項對於 PHP-FPM 的含義。
但是,mpm_worker 具有以下配置:MinSpareThreads
、MaxSpareThreads
和 。再次,與 mpm_worker 隔離,我了解他們的作用。StartServers
ThreadLimit
我的問題是:這些配置如何相互關聯?假設我設定了StartServers=2
和ThreadsPerChild=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 腳本/網站有足夠的記憶體來運行。對於各種可能的快取選項,這只能透過對正在運行的系統進行基準測試來決定。