安裝php時候,細心的大家可以發現我們同時安裝了php-fpm模組,fpm模組就是負責處理請求程序的。而fpm這裡相關的操作將直接影響伺服器能回應多少請求,設定得當將有效提高處理效率,否則將會出現502網關逾時或504錯誤。
下面我們來開啟/etc/php/7.2/fpm/pool.d下的www.conf文件,找出以下幾個參數:
pm=dynamicpm.max_children=5pm.start_servers=2pm.min_spare_servers=1pm.max_spare_servers=3;pm.max_requests=500
這是筆者安裝php後的預設參數,以下逐一講解:
第一個dynamic表示進程的處理模式為動態,對應還有static模式
如果pm設定為staic,那麼只有pm.max_childern這個參數生效
如果pm設定為dynamic,後面4個參數都生效。系統會在php-fpm執行開始時啟動pm.start_servers個php-fpm進程,然後根據系統的需求動態在pm.min_spare_servers和pm.max_spare_servers之間調整php-fpm進程數。
第二個參數pm.max_children表示最大能fork(啟動)多少個進程,很明顯,這個數額越大,那麼將能同時更多的請求,自然不會出現連接慢、請求等待時長但是CPU或內存還佔用不高的情況。這個數值在靜態方式下指開啟的php-fpm進程數量, 在動態方式下限定php-fpm的最大行程數。
第三個參數pm.start_servers表示如果是dynamic動態模式下,初始狀態啟動幾個進程,然後根據需要動態調整,並由pm.min_spare_servers和pm.max_spare_servers兩個參數決定。
第四個參數pm.min_spare_servers表示動態方式下空閒狀態下的最小php-fpm進程數量,清理空閒行程後保留的數量
第五個參數pm.max_spare_servers表示動態方式下空閒狀態的最大php-fpm進程數量,即空閒行程達到此數值時清理
第六個參數pm.max_requests表示經歷多少次請求後,銷毀此程序重新啟動,這樣可以避免記憶體洩漏問題。
很明顯這裡max_children是5剛開始還夠用,隨著流量增加一定是不夠用的,下面來談談具體的數值設定,最直接影響的是pm.max_children值,最基本的原則是:在記憶體CPU系統資源允許的情況下,越大越好,這裡可給一個計算方式,如一個fpm進程大約15~25M,那麼當伺服器4G記憶體情況下,僅在理想狀態下,開滿可以約150~300個,然後觀察伺服器狀態調整
一般而言,大記憶體伺服器(如32、64G起))可以考慮靜態模式,並發量效果好,小型記憶體伺服器可以考慮動態模式,按需自動控制
大家可以依照自己狀況進行壓力測試,依照自身伺服器狀況調整