2016-09-16 72 views
4

我想澄清一下如何使用php-fpm管理工作流程動態流程管理器。php-fpm如何使用動態流程管理器管理工作人員?

假設我們有如下配置:

pm = dynamic 
pm.max_children = 100 
pm.start_servers = 30 
pm.min_spare_servers = 20 
pm.max_spare_servers = 60 
  1. 當PHP-FPM開始,它產生30個過程
  2. 沒有連接。請問php-fpm根據min_spare_servers的設置關閉了10個工人?如果是,那麼在什麼時候會發生?
  3. 有40個連接到nginx。請問php-fpm會爲每個單獨的工作人員提供連接,並立即產生額外的工作人員來滿足剩餘的連接?
  4. 有80個連接到nginx。在推出60名員工後,php-fpm將如何表現?與(3)相同嗎?
  5. 有120個連接到nginx。將100名工作人員分配到100個連接後會發生什麼? php-fpm是否使用連接隊列?它會限制nginx嗎?請問php-fpm開始刪除連接消息「server reached pm.max_children setting」?
    1. 有50個連接到nginx。 Nginx會從100回到60個連接嗎?還是50?它會立即殺死40名工人還是會等一段時間?

正如你看到的,這是相當關於PHP-FPM如何管理流程的通用問題。更具體地說,我想了解在php-fpm中pm.max_childrenpm.max_spare_servers之間的區別。

回答

5

首先,讓我們假設,而不是nginx連接,我們談論連接/請求上游,即php-fpm服務。

  1. 沒有連接。根據min_spare_servers設置,php-fpm會關閉10個工人嗎?如果是,那麼在什麼時候會發生?

沒有,根據我的測試,掌握過程中不按照min_spare_servers數量終止額外的工人。很可能,指定start_servers等於min_spare_servers是一種很好的做法。

  1. 有40個連接到nginx。請問php-fpm會爲每個單獨的工作人員提供連接,並立即產生額外的工作人員來滿足剩餘的連接?

正確的同時連接到php-fpm將與單獨的工作人員一起提供。如果請求的數量多於start_servers,則主進程將派遣額外的工人(fpm_children_make調用),最多爲max_spare_servers

  1. 有80個連接到nginx。在推出60名員工後,php-fpm將如何表現?與(3)相同嗎?

將叉子必須同時處理所有的請求儘可能多的工人,直到它達到max_children號; fpm主進程每秒執行一次維護(fpm_pctl_perform_idle_server_maintenance調用):如果產生的工人數量大於max_spare_servers,處於空閒狀態的工作人員將向主進程(fpm_got_signalfpm_children_bury調用)發送SIGCHLD信號。

  1. 有120個連接到nginx。將100名工作人員分配到100個連接後會發生什麼? php-fpm是否使用連接隊列?它會限制nginx嗎?請問php-fpm開始刪除消息「服務器達到pm.max_children設置」的連接?

正確,將遵循消息在調試模式下: seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers

  • 有50個連接到nginx的。 Nginx會從100回到60個連接嗎?還是50?它會立即殺死40名工人還是會等一段時間?
  • 在空閒狀態下所有工人將被終止,並達到數量後max_spare_servers主進程將停止終止。
    參數min_spare_serversmax_spare_servers負責同時可以在空閒狀態下活着的工人的最小和最大數量。


    爲了瞭解瓢,嘗試在php-fpm.conf打開調試日誌記錄: ... error_log = /var/log/php5-fpm/fpm-daemon.log ... log_level = debug ... 跟蹤日誌文件:tail -f /var/log/php5-fpm/fpm-daemon.log和使用Apache基準測試工具ab理解的行爲。

    +0

    感謝您的詳細解答!你能否澄清你對5的答案?主要是,將php-fpm隊列連接,或只是放棄它們? –

    +2

    啓用狀態頁面可以獲得一些與隊列相關的數據。 參數'listen queue len'定義可以排隊的最大連接數量。這個數字在池配置中定義 - 「listen.backlog」。由於php-fpm使用文件/ tcp套接字,所以這個數字受限於在/ proc/sys/net/core/somaxconn中定義的系統變量 – antonbormotov

    +0

    忘記了,如果隊列滿了,即將到來的請求將被拒絕。 – antonbormotov