php-fpm優(yōu)化方法
php-fpm存在兩種方式伸蚯,一種是直接開(kāi)啟指定數(shù)量的php-fpm進(jìn)程妹沙,不再增加或者減少反番;
另一種則是開(kāi)始時(shí)開(kāi)啟一定數(shù)量的php-fpm進(jìn)程澜薄,當(dāng)請(qǐng)求量變大時(shí)为肮,動(dòng)態(tài)的增加php-fpm進(jìn)程數(shù)到上限,當(dāng)空閑時(shí)自動(dòng)釋放空閑的進(jìn)程數(shù)到一個(gè)下限肤京。
這兩種不同的執(zhí)行方式颊艳,可以根據(jù)服務(wù)器的實(shí)際需求來(lái)進(jìn)行調(diào)整。
要用到的一些參數(shù)忘分,分別是pm棋枕、pm.max_children、pm.start_servers妒峦、pm.min_spare_servers和pm.max_spare_servers重斑。
pm表示使用那種方式,有兩個(gè)值可以選擇肯骇,就是static(靜態(tài))或者dynamic(動(dòng)態(tài))窥浪。
下面4個(gè)參數(shù)的意思分別為:
pm.max_children:靜態(tài)方式下開(kāi)啟的php-fpm進(jìn)程數(shù)量祖很,在動(dòng)態(tài)方式下他限定php-fpm的最大進(jìn)程數(shù)(這里要注意pm.max_spare_servers的值只能小于等于pm.max_children)
pm.start_servers:動(dòng)態(tài)方式下的起始php-fpm進(jìn)程數(shù)量。
pm.min_spare_servers:動(dòng)態(tài)方式空閑狀態(tài)下的最小php-fpm進(jìn)程數(shù)量漾脂。
pm.max_spare_servers:動(dòng)態(tài)方式空閑狀態(tài)下的最大php-fpm進(jìn)程數(shù)量假颇。
如果dm設(shè)置為static,那么其實(shí)只有pm.max_children這個(gè)參數(shù)生效骨稿。系統(tǒng)會(huì)開(kāi)啟設(shè)置的數(shù)量個(gè)php-fpm進(jìn)程笨鸡。
如果dm設(shè)置為dynamic,4個(gè)參數(shù)都生效坦冠。系統(tǒng)會(huì)在php-fpm運(yùn)行開(kāi)始時(shí)啟動(dòng)pm.start_servers個(gè)php-fpm進(jìn)程形耗,然后根據(jù)系統(tǒng)的需求動(dòng)態(tài)在pm.min_spare_servers和pm.max_spare_servers之間調(diào)整php-fpm進(jìn)程數(shù)。
那么辙浑,對(duì)于服務(wù)器激涤,選擇哪種執(zhí)行方式比較好呢?事實(shí)上例衍,跟Apache一樣昔期,運(yùn)行的PHP程序在執(zhí)行完成后,或多或少會(huì)有內(nèi)存泄露的問(wèn)題佛玄。這也是為什么開(kāi)始時(shí)一個(gè)php-fpm進(jìn)程只占用3M左右內(nèi)存硼一,運(yùn)行一段時(shí)間后就會(huì)上升到20-30M的原因了。(www. 腳本學(xué)堂)
所以梦抢,動(dòng)態(tài)方式因?yàn)闀?huì)結(jié)束掉多余的進(jìn)程般贼,可以回收釋放一些內(nèi)存,所以推薦在內(nèi)存較少的服務(wù)器或者VPS上使用奥吩。具體最大數(shù)量根據(jù) 內(nèi)存/20M 得到哼蛆。
比如說(shuō)512M的VPS,建議pm.max_spare_servers設(shè)置為20(512*0.8/20)霞赫。至于pm.min_spare_servers腮介,則建議根據(jù)服務(wù)器的負(fù)載情況來(lái)設(shè)置,比較合適的值在5~10之間端衰。
然后對(duì)于比較大內(nèi)存的服務(wù)器來(lái)說(shuō)叠洗,設(shè)置為靜態(tài)的話會(huì)提高效率。
因?yàn)轭l繁開(kāi)關(guān)php-fpm進(jìn)程也會(huì)有時(shí)滯旅东,所以?xún)?nèi)存夠大的情況下開(kāi)靜態(tài)效果會(huì)更好灭抑。數(shù)量也可以根據(jù) 內(nèi)存/30M 得到。
比如說(shuō)2GB內(nèi)存的服務(wù)器抵代,可以設(shè)置為50腾节;4GB內(nèi)存可以設(shè)置為100等。
比如,如果是512M的vps案腺,設(shè)置的參數(shù)如下:
代碼示例:
pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=5
pm.max_spare_servers=20
可以最大的節(jié)省內(nèi)存并提高執(zhí)行效率庆冕。