FPM的涌实际现了PHP运用的分布式支配,这样使得PHP和web做事器可以在不同的机器上。当然与其说是FPM不如说是FastCGI的涌现。最初FPM并没有被PHP的官方正式运用于PHP中,只是作为PHP的一个补丁运用。但是自从PHP5.3.3版本往后FPM被正式捆绑进PHP中,作为了PHP的一部分。这样我们配置起来比较方便,只需在PHP编译的时候添加—enable-fpm选项即可
php-5.6.9]# ./configure –enable-fpm
Fpm的大略配置
Fpm在php编译的时候添加—enable-fpm选项即可启动fpm,此外在编译的时候还有两个选项分别是 –with-fpm-user=USER 和—with-fpm-group=GROUP,用来设定fpm所属的用户和用户组。如果不指定这两项,那默认的用户和用户组都是nobody。当然这两项也可以在fpm的配置文件php-fpm.conf(其所在目录为PHP安装目录/etc/php-fpm.conf)中修正。
user = nobody
//所属用户
group = nobody
//所属组
listen = 127.0.0.1:9000
//fpm所在做事器的ip地址和监听的端口号,默认为9000
pm = dynamic
//设置进程管理器是如何管理子进程的,dynamic动态管理至少会有一个子进程被创建,其数量有个最大值由pm.max_children来设定,而创建的数量由pm.start_servers来设定;static 静态管理设置固天命量的子进程随着做事启动而被创建;ondemand 在做事启动的时候并不创建子进程只是当有要求的时候才根据情形创建。
pm.max_children = 10
//当pm设置为static的时候,此值表示随着做事的启动创建的子进程的数量;当pm设置为dynamic或者ondemand的时候,此值表示创建的子进程最多不能超过此数量
pm.start_servers = 2
//表示随着做事启动创建的子进程(把稳这里是子进程而不是线程)的数量,此选项只有在pm 设置为dynamic的时候才有效。并且这个值默认设置为 min_spare_servers + (max_spare_servers – min_spare_servers)/2,并且如果此值设为0,那么创建的子进程的数量也是由上述公式决定。
pm.min_spare_servers = 1
//哀求闲置的做事进程的数量的最小值
pm.max_spare_servers = 3
//闲置的做事进程的数量的最大值
pm.process_idle_timeout = 10s
//进程的闲置韶光,以秒为单位,超过这个韶光该进程将会被杀去世
Fpm的运用
下面我们来看一下如何管理fastcgi做事,首先我们可以进入php安装目录
~]# cd /usr/local/php5
php5]# ./sbin/php-fpm
//开启fastcgi做事,开启做事往后会在/usr/local/php5/var/run/php-fpm.pid中有fastcgi主进程id
php5]# kill –INT `cat /usr/local/php5/var/run/php-fpm.pid`
//关闭fastcgi做事
php5]# kill –USR2 ` cat /usr/local/php5/var/run/php-fpm.pid`
//重启fastcgi做事
Fpm利用解释
在fpm大略配置中我们提到pm=dynamic和pm.start_servers =2。当开启fastcgi做事往后首先我们查看 php-fpm.pid
php5]# cat /usr/local/php5/var/run/php-fpm.pid //其结果为
32407
php5]# ps x | grep php-fpm //接着我们利用此命令查看其主进程情形
32407 ? Ss 0:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)
php5]# ps –ef | grep php-fpm //然后再利用该命令查看其所有进程情形
root 32407 1 0 13:46 ? 00:00:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)
nobody 32408 32407 0 13:46 ? 00:00:00 php-fpm: pool www
nobody 32409 32407 0 13:46 ? 00:00:00 php-fpm: pool www
在这里我们看到了三条信息,第一条是主进程,由系统创建,其id为32407,父进程id为1。剩余两条是其子进程,由于在pm.start_servers = 2 我们设置的为2,以是随着做事的启动会创建两个子进程。这两个子进程的用户都是nobody(user=nobody),其进程id分别是 32408、32409,第三项是这两个子进程的父进程的id 32407。
当然fpm至少会创建一个子进程,由于如果start_servers 设置为0 那么其会根据上面我们说的那个公式打算出子进程的数量。当然如果我们设置min_spare_servers 和max_spare_servers都为0,那子进程的数量为0,这样的话是不能启动做事的(这些设置有效的条件是pm设为dynamic)。由于fpm利用用户为nobody的子进程来处理要求的,那个由系统创建的主进程——id为32407,所属用户为root——是不能处理要求的。当然我们可以根据我们做事器的实际情形(例如:内存大小)来优化我们这里的进程数量。
以上只是大略的先容了fpm的配置与利用,目的便是为相识释fpm的浸染。