php fpm引數調優

2022-03-13 01:44:44 字數 2268 閱讀 4232

pm = dynamic; 表示使用哪種程序數量管理方式

dynamic表示php-fpm程序數是動態的,最開始是pm.start_servers指定的數量,如果請求較多,則會自動增加,保證空閒的程序數不小於pm.min_spare_servers,如果程序數較多,也會進行相應清理,保證多餘的程序數不多於pm.max_spare_servers

static表示php-fpm程序數是靜態的, 程序數自始至終都是pm.max_children指定的數量,不再增加或減少

pm.max_children = 300;靜態方式下開啟的php-fpm程序數量

pm.start_servers = 20;動態方式下的起始php-fpm程序數量

pm.min_spare_servers = 5;動態方式下的最小php-fpm程序數量

pm.max_spare_servers = 35;動態方式下的最大php-fpm程序數量

如果pm為static, 那麼其實只有pm.max_children這個引數生效。系統會開啟設定數量的php-fpm程序

如果pm為dynamic, 那麼pm.max_children引數失效,後面3個引數生效。系統會在php-fpm執行開始的時候啟動pm.start_servers個php-fpm程序,然後根據系統的需求動態在pm.min_spare_servers和pm.max_spare_servers之間調整php-fpm程序數

那麼,對於我們的伺服器,選擇哪種pm方式比較好呢?事實上,跟apache一樣,執行的php程式在執行完成後,或多或少會有記憶體洩露的問題。這也是為什麼開始的時候乙個php-fpm程序只占用3m左右記憶體,執行一段時間後就會上公升到20-30m的原因了。

對於記憶體大的伺服器(比如8g以上)來說,指定靜態的max_children實際上更為妥當,因為這樣不需要進行額外的程序數目控制,會提高效率。因為頻繁開關php-fpm程序也會有時滯,所以記憶體夠大的情況下開靜態效果會更好。數量也可以根據 記憶體/30m 得到,比如8gb記憶體可以設定為100,那麼php-fpm耗費的記憶體就能控制在 2g-3g的樣子。如果記憶體稍微小點,比如1g,那麼指定靜態的程序數量更加有利於伺服器的穩定。這樣可以保證php-fpm只獲取夠用的記憶體,將不多的記憶體分配給其他應用去使用,會使系統的執行更加暢通。

對於小記憶體的伺服器來說,比如256m記憶體的vps,即使按照乙個20m的記憶體量來算,10個php-cgi程序就將耗掉200m記憶體,那系統的崩潰就應該很正常了。因此應該盡量地控制php-fpm程序的數量,大體明確其他應用占用的記憶體後,給它指定乙個靜態的小數量,會讓系統更加平穩一些。或者使用動態方式,因為動態方式會結束掉多餘的程序,可以**釋放一些記憶體,所以推薦在記憶體較少的伺服器或vps上使用。具體最大數量根據 記憶體/20m 得到。比如說512m的vps,建議pm.max_spare_servers設定為20。至於pm.min_spare_servers,則建議根據伺服器的負載情況來設定,比較合適的值在5~10之間。

在4g記憶體的伺服器上200就可以(我的1g測試機,開64個是最好的,建議使用壓力測試獲取最佳值)

pm.max_requests = 10240;

nginx php-fpm配置過程中最大問題是內洩漏出問題:伺服器的負載不大,但是記憶體占用迅速增加,很快吃掉記憶體接著開始吃交換分割槽,系統很快掛掉!其實根據官方的介紹,php-cgi不存在記憶體洩漏,每個請求完成後php-cgi會**記憶體,但是不會釋放給作業系統,這樣就會導致大量記憶體被php-cgi占用。

官方的解決辦法是降低php_fcgi_max_requests的值,如果用的是php-fpm,對應的php-fpm.conf中的就是max_requests,該值的意思是傳送多少個請求後會重啟該執行緒,我們需要適當降低這個值,用以讓php-fpm自動的釋放記憶體,不是大部分網上說的51200等等,實際上還有另乙個跟它有關聯的值max_children,這個是每次php-fpm會建立多少個程序,這樣實際上的記憶體消耗是max_children*max_requests*每個請求使用記憶體,根據這個我們可以預估一下記憶體的使用情況,就不用再寫指令碼去kill了。

request_terminate_timeout = 30;

最大執行時間, 在php.ini中也可以進行配置(max_execution_time)

request_slowlog_timeout = 2; 開啟慢日誌

slowlog = log/$pool.log.slow; 慢日誌路徑

rlimit_files = 1024; 增加php-fpm開啟檔案描述符的限制

PHP fpm效能調優

注 公司伺服器配置 2核心8g 設定的引數 php max children 1000 tart servers,min spare servers,max spare servers分別為400 500 700 感覺還是扛不住 php fpm.conf有兩個至關重要的引數 乙個是 max chil...

MySQL引數調優

l 通用類 key buffer size 含義 用於索引塊的緩衝區大小,增加它可得到更好處理的索引 對所有讀和多重寫 影響 對於myisam 表的影響不是很大,myisam 會使用系統的快取來儲存資料,所以大量使用 myisam 表的機器記憶體很快就會耗盡。但是,如果你將該值設得過大 例如,大於總...

mysql引數調優

l max connect errors max connect errors預設值為10,也即mysqld執行緒沒重新啟動過,一台物理伺服器只要連線 異常中斷累計超過10次,就再也無法連線上mysqld服務,為此建議大家設定此值至少大於等於10w 若異常中斷累計超過引數設定的值,有二種解決辦法,執...