12.21 php-fpm的pool

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12.21 php-fpm的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/配置目录

 [[email protected] ~]#  cd /usr/local/php-fpm/etc/

[[email protected] etc]# ls

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

2 添加pool,名为aming.com,参数如下。

[[email protected] 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。

[[email protected] 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


[[email protected] 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

[[email protected] 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目录

[[email protected] etc]# mkdir php-fpm.d

[[email protected] etc]# cd php-fpm.d/

[[email protected] php-fpm.d]# cat /usr/local/php-fpm/etc/php-fpm.conf

技术分享图片

[[email protected] 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


[[email protected] 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 [[email protected] php-fpm.d]# ls

aming.conf  www.conf


7 复制完成后,删除php-fpm.conf两个pool的参数,加入include语法,再删除后可以看到参数是多么的干净利落。

[[email protected] 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 检查语法并重新加载。

[[email protected] 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

[[email protected] 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的主要内容,如果未能解决你的问题,请参考以下文章

12.21 php-fpm的pool;12.22 php-fpm慢执行日志;12.23;12.24

12.21 php-fpm的pool;12.22 php-fpm慢执行日志;12.23 ;12.24

12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_b

12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_b

12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理

2018-6-13