php-fpm優(yōu)化參數(shù)介紹
他們分別是:pm、pm.max_children姑曙、pm.start_servers引矩、pm.min_spare_servers、pm.max_spare_servers趋厉。
pm:表示使用那種方式,有兩個值可以選擇胶坠,就是static(靜態(tài))或者dynamic(動態(tài))君账。
在更老一些的版本中,dynamic被稱作apache-like沈善。這個要注意看配置文件的說明乡数。
下面4個參數(shù)的意思分別為:
pm.max_children:靜態(tài)方式下開啟的php-fpm進程數(shù)量
pm.start_servers:動態(tài)方式下的起始php-fpm進程數(shù)量
pm.min_spare_servers:動態(tài)方式下的最小php-fpm進程數(shù)
pm.max_spare_servers:動態(tài)方式下的最大php-fpm進程數(shù)量
區(qū)別:
如果dm設置為 static,那么其實只有pm.max_children這個參數(shù)生效闻牡。系統(tǒng)會開啟設置數(shù)量的php-fpm進程净赴。
如果dm設置為 dynamic,那么pm.max_children參數(shù)失效罩润,后面3個參數(shù)生效玖翅。
系統(tǒng)會在php-fpm運行開始 的時候啟動pm.start_servers個php-fpm進程,
然后根據(jù)系統(tǒng)的需求動態(tài)在pm.min_spare_servers和pm.max_spare_servers之間調(diào)整php-fpm進程數(shù)
服務器具體配置
對于我們的服務器割以,選擇哪種執(zhí)行方式比較好呢金度?事實上,跟Apache一樣严沥,運行的PHP程序在執(zhí)行完成后猜极,或多或少會有內(nèi)存泄露的問題。
這也是為什么開始的時候一個php-fpm進程只占用3M左右內(nèi)存消玄,運行一段時間后就會上升到20-30M的原因了跟伏。
對于內(nèi)存大的服務器(比如8G以上)來說扎筒,指定靜態(tài)的max_children實際上更為妥當,因為這樣不需要進行額外的進程數(shù)目控制酬姆,會提高效率。
因為頻繁開關(guān)php-fpm進程也會有時滯奥溺,所以內(nèi)存夠大的情況下開靜態(tài)效果會更好辞色。數(shù)量也可以根據(jù) 內(nèi)存/30M 得到,比如8GB內(nèi)存可以設置為100浮定,
那么php-fpm耗費的內(nèi)存就能控制在 2G-3G的樣子相满。如果內(nèi)存稍微小點,比如1G桦卒,那么指定靜態(tài)的進程數(shù)量更加有利于服務器的穩(wěn)定立美。
這樣可以保證php-fpm只獲取夠用的內(nèi)存,將不多的內(nèi)存分配給其他應用去使用方灾,會使系統(tǒng)的運行更加暢通建蹄。
對于小內(nèi)存的服務器來說,比如256M內(nèi)存的VPS裕偿,即使按照一個20M的內(nèi)存量來算洞慎,10個php-cgi進程就將耗掉200M內(nèi)存,那系統(tǒng)的崩潰就應該很正常了嘿棘。
因此應該盡量地控制php-fpm進程的數(shù)量劲腿,大體明確其他應用占用的內(nèi)存后,給它指定一個靜態(tài)的小數(shù)量鸟妙,會讓系統(tǒng)更加平穩(wěn)一些焦人。或者使用動態(tài)方式重父,
因為動態(tài)方式會結(jié)束掉多余的進程花椭,可以回收釋放一些內(nèi)存,所以推薦在內(nèi)存較少的服務器或VPS上使用房午。具體最大數(shù)量根據(jù) 內(nèi)存/20M 得到个从。
比如說512M的VPS,建議pm.max_spare_servers設置為20歪沃。至于pm.min_spare_servers嗦锐,則建議根據(jù)服務器的負載情況來設置,比如服務器上只是部署php環(huán)境的話沪曙,比較合適的值在5~10之間奕污。