1. 程式人生 > >12.21 php-fpm的pool

12.21 php-fpm的pool

pool

12.21 php-fpm的pool

和LAMP不同的是,在LNMP架構中,php-fpm座位獨立的一個服務存在。既然是獨立服務,那麽它必然有自己的配置文件。

php-fpm的配置文件為/usr/local/php-fpm/etc/php-fpm.conf,它同樣也支持include語句,類似於nginx.conf裏面的include。

Nginx可以配置多個虛擬主機,php-fpm同樣也支持配置多個pool,每一個pool可以監聽一個端口(ip:port),也可以監聽一個socket。

為什麽要隔離pool?

因為如果pool有某一個站點發生問題,例如其中一個站點占用了龐大的資源,導致其他站點運行卡頓,或者奔潰,所以這樣會牽連pool裏面其他站點的運行。


定義pool

1 進入php-fpm/etc/配置目錄

[root@AliKvn ~]# cd /usr/local/php-fpm/etc/

[root@AliKvn etc]# ls

pear.conf php-fpm.conf php-fpm.conf.default php.ini

2 添加pool,名為aming.com,參數如下。

[root@AliKvn etc]# vim php-fpm.conf
[aming.com]
listen = /tmp/aming.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

3 添加完成後-t檢查語法並重啟或者reload。

[root@AliKvn etc]# /usr/local/php-fpm/sbin/php-fpm -t

[02-May-2018 11:32:20] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful


[root@AliKvn etc]# /etc/init.d/php-fpm reload

Reload service php-fpm done

4 查看進程,看看進程右側有沒有多了剛剛配置的pool(aming.com)

技術分享圖片

5 修改aaa.com監聽aming的socket,添加如下參數

location ~ \.php$
    {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fcgi.sock;
#        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name;
    }
}

6 加入 include語法,拆分pool的配置文件conf

include = etc/php-fpm.d/*.conf

[root@AliKvn php-fpm.d]# !vim

vim /usr/local/php-fpm/etc/php-fpm.conf

[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf

6.1 復制參數

創建php-fpm.d目錄

[root@AliKvn etc]# mkdir php-fpm.d

[root@AliKvn etc]# cd php-fpm.d/

[root@AliKvn php-fpm.d]# cat /usr/local/php-fpm/etc/php-fpm.conf

技術分享圖片

[root@AliKvn php-fpm.d]# vim www.conf

6.2 復制www參數到www.conf

[www]
listen = /tmp/php-fcgi.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024


[root@AliKvn php-fpm.d]# vim aming.conf

6.3 復制aming.com參數到aming.conf

[aming.com]
listen = /tmp/aming.sock
#listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024


6.4 [root@AliKvn php-fpm.d]# ls

aming.conf www.conf


7 復制完成後,刪除php-fpm.conf兩個pool的參數,加入include語法,再刪除後可以看到參數是多麽的幹凈利落。

[root@AliKvn php-fpm.d]# cat !$

cat /usr/local/php-fpm/etc/php-fpm.conf

[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf


8 檢查語法並重新加載。

[root@AliKvn php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t

[02-May-2018 12:07:00] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

[root@AliKvn php-fpm.d]# /etc/init.d/php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm done

9 重啟後檢查進程

技術分享圖片

總結

定義多個pool的原因:

假如現在test.com的請求量很大,導致最終把php-fpm進程耗盡了。

最多可以啟動50個子進程,但是啟動完50個進程後,所有都在忙,又有新的請求來的時候,

此時會報502狀態碼,因為沒有多余的php-fpm進程給請求監聽服務。

而另外一個pool(aming.com)請求則不會受影響,因為它是另外一個pool。


12.21 php-fpm的pool