FPM是FastCGI Process Manager的缩写,由全称我们可以知道其和FastCGI有关,就是一个FastCGI的进程管理器。对于FastCGI我们可以理解成一个协议,儿FPM是其在PHP中的一个实现。

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的作用。

PHP中的FPM是做什么的_fpm的配置与使用相关推荐

  1. php中的fpm_PHP中的FPM是做什么的

    FPM是FastCGI Process Manager的缩写,由全称我们可以知道其和FastCGI有关,就是一个FastCGI的进程管理器.对于FastCGI我们可以理解成一个协议,儿FPM是其在PH ...

  2. python软件是干什么用的-python中的django是做什么的

    Django是什么? Django是一个基于Python的Web应用框架.它与Python的另外一个Web 框架 Flask最大的区别是,它奉行 "包含一切" 的哲学.该理念即为: ...

  3. python里的关键字有哪些_Python中的yield关键字做了什么?

    Python中的yield关键字做了什么 要理解yield做了什么,就必须明白生成器(generators)为何物,而在明白生成器之前还要知道迭代器(iterables). 1.迭代器 当我们创建一个 ...

  4. echarts迁徙图 vue_vue中高德搭配echarts做数据迁徙流线图

    前言 此系列共分为以下几篇 <vue中高德地图的使用> <vue中基于高德的多行政区域覆盖> <vue中高德搭配echarts做数据迁徙流线图> (本篇) 本篇效果 ...

  5. c语言编程代码对父母感恩,c语言中编程:每个做父母的都关心自己孩子成人后孩子的生高:...

    c语言中编程:每个做父母的都关心自己孩子成人后孩子的生高: 据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传.饮食习惯与体育锻炼等.小孩成人后的身高与其父母的身高和自身的性别密 ...

  6. python中sys模块是什么内容_python中sys模块是做什么用的

    python中的sys是提供了一系列有关python运行环境的变量和函数的模块,如sys.argv函数实现从程序外部向程序传递参数:sys.platform函数用于获取当前系统平台. sys模块提供了 ...

  7. java中如何开启事务_Java中开启事务操做数据库

    1.事务的四大特性(ACID)html 一.原子性(atomicity):组成事务的语句造成了一个逻辑单元,不能只执行一部分:数据库 二.一致性(consistency):在事务处理执行先后,数据库与 ...

  8. 纪中国庆10.5做题小结

    纪中国庆10.5做题小结 T1:教主的花园 T2:教主泡嫦娥 T3:保镖排队 T4:教主的别墅 T1:教主的花园 Description [问题背景] LHX教主最近总困扰于前来膜拜他的人太多了,所以 ...

  9. python中mod是什么意思_【python中,mod_python到底做了些什么呢?】mod python 教程

    python 编程小白 ,不会用doctest 请大神指教怎么用!! >>> >>> def is_between(v, lower, higher): ...   ...

  10. 计算机表格怎样筛选男女,excel表格数据男女筛选-EXCEL表格中选择性别怎么做 就是如何做筛选 ,比如......

    如何将一张EXCEL表格中同时符合2个条件的数据筛选... 利用excel的数据有效性功能可以达到目标,以下步骤以excel2007为例. 1.首先在电脑上打开目标表格文件,选中目标单元格. 2.然后 ...

最新文章

  1. Luogu4451 [国家集训队]整数的lqp拆分
  2. ASP.NET 5 RC 1:UrlRouting 设置(不包含MVC6的UrlRouting设置)
  3. Android L 使用ART能提高多少性能?
  4. cdr 表格自动填充文字_「Excel技巧」Excel也可以实现自动填充26英文字母编号
  5. thinkphp内置标签简单讲解
  6. java utf-8 gbk_Java 字符转码之UTF-8转为GBK/GB2312
  7. Socket相关操作超时
  8. Ubuntu 14.10 下开机不进入图形化界面
  9. 集成微信支付的代码。兼容小程序,扫码,app,公众号。h5 支付 ,以及 服务商提现...
  10. java实现三级联动查询_jeefast和Mybatis实现三级联动的示例代码
  11. 在LINUX中如何把2个文件中的内容合到另一个文件中
  12. 安装 mysql 数据库, 并做 主 从(二)
  13. 《Scala机器学习》一一1.1 Scala入门
  14. 041——VUE中组件之pros数据的多种验证机制实例详解
  15. html5语义化标签标记定义导航,gogo娱乐-官方网站
  16. oppoA37m rom固件刷机包下载 免费下载 解锁专用
  17. Android源码配置默认输入法
  18. 了解光纤宽带与普通宽带ADSL区别、光纤的通信原理
  19. 你怎么看待互联网创业的国外问卷调查?
  20. type接口和class的区别(类型和类)

热门文章

  1. TiDB 产品常见问题
  2. ASP与JSP的比较
  3. js获取数组第一个和最后一个元素
  4. 基于Android手机酒店客房预订系统
  5. MSOCache文件夹能否删除?
  6. 反思-我们真的初老了么?
  7. 什么是Cisco ACI?
  8. VTK系列教程九:VR图像裁剪
  9. 马斯克发起投票:是否应该出售特斯拉10%的股票?超5成粉丝赞成
  10. python数据分析库pandas官方教程