php-fpm介绍及配置

php-fpm是什么

全称是php fastcgi process manager即php fastcgi进程管理器,相比fastcgi静态的唤起cgi,fpm能根据访问的压力动态的唤起cgi进程和销毁以到达动态的调整cgi数量,这样可以有效的使用内存。除此之外还有其它的一些优点,比如,fpm还可以平滑的重载php配置;由于fpm是使用Unix-Socket来和服务器通讯,所以也不用再配置cgi端口;fpm有更好的状态输出和slowlog日志,502的时候能给出更多的错误细节。

php-fpm配置

从php5.3.3版本开始就已经集成了fpm,不再是第三方的包了,如果使用的是php5.3.3以前的版本就得自己去安装fpm包了,对于php5.2.x的版本,fpm的配置文件还是xml格式,php5.3.x开始fpm配置文件就已经支持ini格式了。

下面是一个ini格式的配置文件

[plain] view plaincopyprint?

  1. ;this configuration is for PHP 5.3.10 for heavy loaded servers
  2. [global]
  3. error_log = syslog
  4. log_level = error
  5. rlimit_files = 655360
  6. rlimit_core = 0
  7. [myapp]
  8. user = nobody
  9. group = nobody
  10. listen = fpm.sock
  11. listen.allowed_clients = 127.0.0.1
  12. pm = dynamic
  13. pm.max_children = 1000
  14. pm.start_servers = 20
  15. pm.min_spare_servers = 10
  16. pm.max_spare_servers = 30
  17. pm.max_requests = 500
  18. ; system max load (request number) = max_children * max_requests = 500,000
  19. pm.status_path = /fpm_status
  20. ping.path = /status
  21. ping.response = ok
  22. slowlog = /data/phplogs/phpfpm_slow.log
  23. request_slowlog_timeout = 3s
  24. ;listen.backlog = 262144
  25. ; The timeout for serving a single request after which the worker process will
  26. ; be killed. This option should be used when the ‘max_execution_time‘ ini option
  27. ; does not stop script execution for some reason. A value of ‘0‘ means ‘off‘.
  28. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
  29. ; Default Value: 0
  30. ;request_terminate_timeout = 0
  31. rlimit_files = 655360
  32. rlimit_core = 0
  33. security.limit_extensions = .php .html
  34. php_admin_value[‘date.timezone‘] = ‘Asia/Shanghai‘
;this configuration is for PHP 5.3.10 for heavy loaded servers

[global]
error_log = syslog
log_level = error
rlimit_files = 655360
rlimit_core = 0

[myapp]
user = nobody
group = nobody
listen = fpm.sock
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 1000
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500
; system max load (request number) = max_children * max_requests = 500,000

pm.status_path = /fpm_status
ping.path = /status
ping.response = ok

slowlog = /data/phplogs/phpfpm_slow.log
request_slowlog_timeout = 3s
;listen.backlog = 262144

; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the ‘max_execution_time‘ ini option
; does not stop script execution for some reason. A value of ‘0‘ means ‘off‘.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_terminate_timeout = 0

rlimit_files = 655360
rlimit_core = 0

security.limit_extensions = .php .html

php_admin_value[‘date.timezone‘] = ‘Asia/Shanghai‘

参数说明:

error_log string
错误日志的位置. 默认: 安装路径#INSTALL_PREFIX#/log/php-fpm.log.

log_level string
错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.

emergency_restart_threshold int
如果子进程在emergency_restart_interval设定的时间内收到该参数设定次数的SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动。 0 表示 ‘关闭该功能’. 默认值: 0 (关闭).

emergency_restart_interval mixed
emergency_restart_interval用于设定平滑重启的间隔时间. 这么做有助于解决加速器中共享内存的使用问题. 可用单位: s(秒), m(分), h(小时), 或者 d(天). 默认单位: s(秒). 默认值: 0 (关闭).

process_control_timeout mixed
设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.

daemonize boolean
设置FPM在后台运行. 设置 ‘no’ 将 FPM 保持在前台运行用于调试. 默认值: yes.

运行配置区段
在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。

listen string
设置接受FastCGI请求的地址. 可用格式为: ‘ip:port’, ‘port’, ‘/path/to/unix/socket’. 每个进程池都需要设置.

listen.backlog int
设置 listen(2) 的半连接队列长度. ‘-1′ 表示无限制. 默认值: -1.

listen.allowed_clients string
设置允许连接到FastCGI的服务器IPV4地址. 等同于PHP FastCGI (5.2.2+)中的 FCGI_WEB_SERVER_ADDRS环境变量. 仅对TCP监听起作用. 每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接. 默认值: any.

listen.owner string
如果使用,表示设置Unix套接字的权限. 在Linux中,读写权限必须设置,以便用于WEB服务器连接. 在很多BSD派生的系统中可以忽略权限允许自由连接. 默认值: 运行所使用的用户合租, 权限为0666.

listen.group string
参见 listen.owner.

listen.mode string
参见 listen.owner.

user string
FPM 进程运行的Unix用户. 必须设置.

group string
FPM 进程运行的Unix用户组. 如果没有设置,则默认用户的组被使用.

pm string
设置进程管理器如何管理子进程. 可用值: static, dynamic. 必须设置.

static – 子进程的数量是固定的 (pm.max_children).

dynamic – 子进程的数量在下面配置的基础上动态设置: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.

pm.max_children int
子进程的数量,pm 设置为 static 时表示创建的, pm 设置为 dynamic 时表示最大可创建的. 必须设置.

该选项设置可以同时提供服务的请求数限制. 类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量.

pm.start_servers in
设置启动时创建的子进程数目. 仅在 pm 设置为 dynamic 时使用. 默认值: min_spare_servers + (max_spare_servers – min_spare_servers) / 2.

pm.min_spare_servers int
设置空闲服务进程的最低数目. 仅在 pm 设置为 dynamic 时使用. 必须设置.

pm.max_spare_servers int
设置空闲服务进程的最大数目. 仅在 pm 设置为 dynamic 时使用. 必须设置.

pm.max_requests int
设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 ’0′ 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.

pm.status_path string
FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none.

ping.path string
FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/).

ping.response string
用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.

request_terminate_timeout mixed
设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的’max_execution_time’因为某些特殊原因没有中止运行的脚本有用. 设置为 ’0′ 表示 ‘Off’. Available units: s(econds)(default), m(inutes), h(ours), or d(ays). Default value: 0.

request_slowlog_timeout mixed
当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 ’0′ 表示 ‘Off’. 可用单位: s(秒)(默认), m(分), h(小时), 或者 d(天). 默认值: 0.

slowlog string
慢请求的记录日志. 默认值: #INSTALL_PREFIX#/log/php-fpm.log.slow.

rlimit_files int
设置文件打开描述符的rlimit限制. 默认值: 系统定义值.

rlimit_core int
设置核心rlimit最大限制值. 可用值: ‘unlimited’ 、0或者正整数. 默认值: 系统定义值.

chroot string
启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用.

chdir string
设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时).

catch_workers_output boolean
重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.

nginx配置

如果使用unix-socket来与nginx配合,nginx中的配置也要做相应的更改

1. 在ngnix配置的server_name下面声明全局的fpm变量

[plain] view plaincopyprint?

  1. server {
  2. listen 80 ;
  3. server_name xxx;
  4. #在这里插入,设置为全局变量
  5. set $fpm_sock ‘unix:/var/run/myapp/fpm.sock‘;
  6. ...
  7. }
server {
       listen 80 ;
       server_name xxx;
       #在这里插入,设置为全局变量
       set    $fpm_sock ‘unix:/var/run/myapp/fpm.sock‘;
        ...
}

2. 然后改造所有 fastcgi_pass 字段

[plain] view plaincopyprint?

  1. location = / {
  2. include fastcgi_params;
  3. root xxx/apps/fnt;
  4. fastcgi_pass $fpm_sock;
  5. fastcgi_index index.php;
  6. fastcgi_param SCRIPT_FILENAME xxx/apps/fnt/index.php ;
  7. }
location = / {
     include        fastcgi_params;
     root           xxx/apps/fnt;
     fastcgi_pass   $fpm_sock;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  xxx/apps/fnt/index.php ;
}

fpm status

在nginx.conf里配置

[plain] view plaincopyprint?

  1. server {
  2. listen 8360;
  3. server_name localhost;
  4. location /fpm_status {
  5. if ( $arg_sid = ‘‘ ) {
  6. rewrite ^ /fpm_list last;
  7. }
  8. include fastcgi_params;
  9. fastcgi_pass unix:/var/run/$arg_sid/fpm.sock;
  10. }
  11. #列出所有正在运行的fpm-sock
  12. location /fpm_list {
  13. default_type text/html;
  14. content_by_lua "
  15. ngx.print(‘<h2>Runing FPM instances:</h2>‘)
  16. local cmd = [[/bin/ls -1 /var/run/ | grep rgapp- | awk ‘{print \"<p><a href=?sid=\"$1\">\"$1\"</a>\"}‘]]
  17. local f = io.popen(cmd, ‘r‘)
  18. local log = f:read(‘*a‘)
  19. f:close()
  20. ngx.print(log)
  21. ";
  22. }
  23. ...
  24. }
server {
        listen       8360;
        server_name  localhost;

        location /fpm_status {
                if ( $arg_sid = ‘‘ ) {
                        rewrite ^ /fpm_list last;
                }
                include fastcgi_params;
                fastcgi_pass unix:/var/run/$arg_sid/fpm.sock;
        }
        #列出所有正在运行的fpm-sock
        location /fpm_list {
                default_type text/html;
                content_by_lua "
                    ngx.print(‘<h2>Runing FPM instances:</h2>‘)
                    local cmd = [[/bin/ls -1 /var/run/ | grep rgapp- | awk ‘{print \"<p><a href=?sid=\"$1\">\"$1\"</a>\"}‘]]
                    local f = io.popen(cmd, ‘r‘)
                    local log = f:read(‘*a‘)
                    f:close()
                    ngx.print(log)
                 ";
         }
         ...
}

因为应用池里面会有多个应用,所以通过sid参数来参看指定应用的fpm状态。

通过地址http://xxx:8360/fpm_status?sid=myapp查看fpm状态

时间: 2024-07-29 05:25:06

php-fpm介绍及配置的相关文章

SharePoint 2013 SPDistributedCacheService 介绍与配置

SharePoint 2013 SPDistributedCacheService 是SharePoint  server 2013引入的一种缓存机制,它通常用于以下功能的缓存: Newsfeeds Authentication OneNote client access Security Trimming Page load performance (直接影响页面加载和反应速度) 有些Cache 是不通过SPDistributedCacheService 缓存的,例如: Blob Cache

03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

 1 PersonTestMapper.xml中的内容如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:命名空间

Petapoco的介绍和配置

一.基本介绍 一个产品诞生以后,宣传必不可少,初识Petapoco,我居然耐心把官网上的英文介绍通读一遍,因为我发现,作者是一个十足的文艺青年,他没有把他的产品宣传得无比高大上,而是很多地方透露着有点低调的.谦卑的气息,清新,可爱.很多地方都能看出,比如在Background那一段:So, what's with the name? Well if Massive is massive, this is "Peta" massive (it's now over 1,500 lines

tomcat介绍及配置

Java体系结构包括四个独立但相关的技术:    Java程序设计语言    Java class文件格式    Java API    Java VM 用Java语言编译源代码,把它编译成Java Class文件,然后在Java VM中运行class文件:当编写程序时,通过调用类(Java API)中的方法来访问系统资源,而当程序运行时,它通过调用class文件中实现了Java API的方法也满足程序的Java API调用.Java VM和Java API一起组成了一个"平台",所有

c++入门之一:EGE图形库介绍与配置(VS2013、DEVCPP)

c++学习的方式方法很多,本篇笔记主要记录DEVCPP和VS2013的ege图形库的配置,为接下来利用ege图形库学习c++做准备. 一.EGE图形库简介 EGE图形行库中的EGE为Easy Graphics Engine的缩写,是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C++语言新手的图形库,它的目标也是为了替代TC的BGI库而存在.它的使用方法与TC中的graphics.h相当接近. EGE图形库的作者是:misakamm,他的主页请点击:[这里] E

华为动态路由RIP介绍及配置

静态路由:安全.配置繁琐.网络工程师必须非常了解本网络结构 动态路由:适用于中型及大型网络.相应网络拓扑结构改变.不安全 IGPS  内部网关路由  工作在一个AS内部 EGPS  边界网关路由  工作在AS之间 AS自治系统:一组受相同组织管理并维护的网络设备构成的网络 IGPS:RIP OSPF IS-IS(底层地址比较怪). IGRP(cisco私有协议,基本不用).EIGRP(cisco) EGPS:BGP.EGP(基本不用) 距离矢量型:RIP 开销COST=HOP跳数 链路带宽型:O

Apache三种工作模式介绍与配置

Apache三种工作模式介绍与配置 一.Apache的三种工作模式介绍及相关查看方法 1.Apache三种工作模式简介 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式.它们分别是prefork,worker和event,它们同时也代表这Apache的演变和发展. Apache在configure配置编译参数的时候,可以使用 --with-mpm=prefork|worker|event 来指定编译为那一种MPM,当然也可以用编译为三种

python学习第二讲,pythonIDE介绍以及配置使用

目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以及配置IDE 1.初始化IDE 2.打开python项目. 3.pycharm设置python的默认解释器版本. 4.pycharm设置为所有用户可以使用,以及启动pycharm 5.设置pycharm启动图标(快捷方式) 6.卸载之前的pycharm python学习第二讲,pythonIDE介绍

LINUX RAID介绍与配置

LINUX RAID介绍与配置 介绍raid类型,以及配置软raid Linux RAID 1. RAID的介绍 2. RAID的级别 3. 软RAID的配置工具命令介绍 4. 相关实例 6. md设备维护处理 Linux RAID 1. RAID的介绍 RAID全称为: Redundant Array Inexpensive Disks 将多个磁盘组合成阵列,提供更好的性能和冗余能力 2. RAID的级别 raid0: 读.写性能提升,无容错能力,空间n*disk raid1: 写性能略有下降

Docker存储驱动devicemapper介绍和配置

devicemapper介绍 Device Mapper是Linux系统中基于内核的高级卷管理技术框架.Docker的devicemapper存储驱动就是基于该框架的精简置备和快照功能来实现镜像和容器的管理. 注:Device Mapper是Linux的一种技术框架,而devicemapper是Docker Engine基于Device Mapper提供的一种存储驱动. 早期的Docker运行在Ubuntu和Debian Linux上并使用AUFS作为后端存储.Docker流行之后,越来越多的的