标签: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。
标签:pool
原文地址:http://blog.51cto.com/13578154/2110637