在fasgcgi模式下,php會(huì)啟動(dòng)多個(gè)php-fpm進(jìn)程,來接收nginx發(fā)來的請求,那是不是進(jìn)程越多,速度就越快呢?這可不一定!得根據(jù)我?的機(jī)器配置和業(yè)務(wù)量來決定。
我們先來看下,設(shè)定進(jìn)程的配置在哪里?
pm = static | dynamic | ondemand
pm可以設(shè)置成這樣3種,我們用的最多的就上前面2種。
pm = static 模式
pm = static 表示我們創(chuàng)建的php-fpm子進(jìn)程數(shù)量是固定的,那么就只有pm.max_children = 50這個(gè)參數(shù)生效。你啟動(dòng)php-fpm的時(shí)候就會(huì)一起全部啟動(dòng)51(1個(gè)主+50個(gè)子)個(gè)進(jìn)程,頗為壯觀。
pm = dynamic 模式
pm = dynamic模式,表示啟動(dòng)進(jìn)程是動(dòng)態(tài)分配的,隨著請求量動(dòng)態(tài)變化的。他由 pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers 這幾個(gè)參數(shù)共同決定。
pm.max_children = 50 是最大可創(chuàng)建的子進(jìn)程的數(shù)量。必須設(shè)置。這里表示最多只能50個(gè)子進(jìn)程。
pm.start_servers = 20 隨著php-fpm一起啟動(dòng)時(shí)創(chuàng)建的子進(jìn)程數(shù)目。默認(rèn)值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。這里表示,一起啟動(dòng)會(huì)有20個(gè)子進(jìn)程。
pm.min_spare_servers = 10
設(shè)置服務(wù)器空閑時(shí)最小php-fpm進(jìn)程數(shù)量。必須設(shè)置。如果空閑的時(shí)候,會(huì)檢查如果少于10個(gè),就會(huì)啟動(dòng)幾個(gè)來補(bǔ)上。
pm.max_spare_servers = 30
設(shè)置服務(wù)器空閑時(shí)最大php-fpm進(jìn)程數(shù)量。必須設(shè)置。如果空閑時(shí),會(huì)檢查進(jìn)程數(shù),多于30個(gè)了,就會(huì)關(guān)閉幾個(gè),達(dá)到30個(gè)的狀態(tài)。
到底選擇static還數(shù)dynamic?
很多人恐懼癥來襲,不知道選什么好?
一般原則是:動(dòng)態(tài)適合小內(nèi)存機(jī)器,靈活分配進(jìn)程,省內(nèi)存。靜態(tài)適用于大內(nèi)存機(jī)器,動(dòng)態(tài)創(chuàng)建回收進(jìn)程對服務(wù)器資源也是一種消耗。
如果你的內(nèi)存很大,有8-20G,按照一個(gè)php-fpm進(jìn)程20M算,100個(gè)就2G內(nèi)存了,那就可以開啟static模式。如果你的內(nèi)存很小,比如才256M,那就要小心設(shè)置了,因?yàn)槟愕臋C(jī)器里面的其他的進(jìn)程也算需要占用內(nèi)存的,所以設(shè)置成dynamic是最好的,比如:pm.max_chindren = 8, 占用內(nèi)存160M左右,而且可以隨時(shí)變化,對于一半訪問量的網(wǎng)站足夠了。