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