PHP-FPM是一个PHP FastCGI管理器,php-fpm.conf配置文件用于控制PHP-FPM管理进程的相关参数,比如工作子进程的数量、运行权限、监听端口、慢请求等等。

我们在编译安装PHP的时,在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。PHP-FPM配置文件为 php-fpm.conf,其语法类似 php.ini 。一般我们可以在安装目录中找到:/usr/local/php/etc/php-fpm.conf,如果没有的话,那就可能在/usr/local/php/etc/php-fpm.d/.conf*。

全局配置

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice

pid:设置PID文件的位置。

error_log:错误日志的位置

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

进程池配置

在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置,在默认的php-fpm进程池的配置文件中,开头是[www]。

[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 51
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 40
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log

listen:设置接受 FastCGI 请求的地址。可用格式为:'ip:port','port','/path/to/unix/socket'。我们这里配置/tmp/php-cgi.sock,使用Unix域Socket因为不走网络,可以提高Nginx和php-fpm通信的性能,但在高并发的情况下可能不稳定,这时我们需要设置下一个参数backlog。当然你也可以设置为127.0.0.1:9000,但我不建议使用。据nginx.conf中的配置fastcgi_pass unix:/tmp/php-cgi.sock;设置PHP监听,:让Nginx支持PHP。

listen.backlog:设置 listen 的半连接队列长度,-1表示无限制,由操作系统决定。

listen.allowed_clients:允许访问FastCGI进程的IP白名单,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。我把它设置为127.0.0.1,即只有当前设备能把请求转发给php-fpm进程池。

listen.owner:运行所使用的用户和组,我们这里设置为www用户组,权限为 0666。

listen.group:同上,设置为www。

listen.mode:同上,设置为0666。

user:FPM 进程运行的系统用户。必须设置,这里我们设置为www,即非root用户。

group:FPM 进程运行的系统用户组。如果没有设置,则默认用户的组被使用。

pm:设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。dynamic表示php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers。static表示php-fpm进程数是静态的, 进程数自始至终都是pm.max_children指定的数量,不再增加或减少。

pm.max_children:静态方式下开启的php-fpm进程数量,这个设置没有绝对正确的值。一般应用的PHP进程需要消耗10~30MB内存,假设我们使用的服务器设备为这个PHP-FPM进程池分配1024M内存,那么我们可以将这个值设置为(1024MB内存)/(每个进程使用20M)= 51个进程。

pm.start_servers:动态方式下的起始php-fpm进程数量,即当PHP-FPM启动时,PHP-FPM进程池中立即可用的进程数,我一般设置这个值为10。

pm.min_spare_servers:动态方式下的最小php-fpm进程数量,如果PHP空闲时,PHP-FPM进程池中科院存在进程数量的最小值。这个值一般与pm.start_servers设置的值一样,所以我这里也设置为10。

pm.max_spare_servers:动态方式下的最大php-fpm进程数量,如果空闲进程大于此值,则进行清理。这个值设置的要比pm.start_servers大。

对于内存大的服务器(比如8G以上)来说,建议指定静态的max_children值,因为这样不需要进行额外的进程数目控制,会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到,比如8GB内存可以设置为100,那么php-fpm耗费的内存就能控制在 2G-3G的样子。如果内存稍微小点,比如1G,那么指定静态的进程数量更加有利于服务器的稳定。这样可以保证php-fpm只获取够用的内存,将不多的内存分配给其他应用去使用,会使系统的运行更加畅通。

request_terminate_timeout:最大执行时间, 在php.ini中也可以进行配置(max_execution_time),这个是用来处理因为PHP执行时间超长而报502错误的解决。

request_slowlog_timeout:当一个请求超过该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。 设置为 '0' 表示 'Off',正常生产环境中我们把它设置为0。

slowlog:慢请求的记录日志。

我们有时候会经常饱受500,502问题困扰。当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。这个时候,我们是可以开启慢日志功能的。比如设置request_slowlog_timeout:10s,当一个请求时长超过该设置的超时时间10秒后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。 php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长等信息。

设置好后,执行以下命令重启PHP-FPM主进程使配置生效。

/etc/init.d/php-fpm restart

PHP配置优化:php-fpm配置解读的更多相关文章

  1. TOMCAT 8.5 配置优化以及JVM配置(windows server)

    下载官方的tomcat,我这里用的是TOMCAT 8.5.46,然后解压出来,解压后的目录如下图 一.server.xml配置优化 进入conf目录,打开server.xml 文件 1. 找到 < ...

  2. php.ini配置max_execution_time和FPM配置request_terminate_timeout

    PHP限定脚本执行时长的方式有几种,下面说下php.ini中的max_execution_time和php-fpm.conf中的request_terminate_timeout 1. php.ini ...

  3. elasticsearch7.0安装及配置优化

    简单讲ES开箱即用,不用任何配置也能玩转搜索引擎:以下内容是根据易企秀线上实际使用场景进行的安装和配置,支持冷热数据分离 1.安装 Linux 环境下载安装包 curl -L -O https://a ...

  4. mysql性能优化-慢查询分析、优化索引和配置

    一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connec ...

  5. VS2010/2012配置优化记录笔记

    VS2010/2012配置优化记录笔记 在某些情况下VS2010/2012运行真的实在是太卡了,有什么办法可以提高速度吗?下面介绍几个优化策略,感兴趣的朋友可以参考下,希望可以帮助到你   有的时候V ...

  6. PHPSTORM/IntelliJ IDEA 常用 设置配置优化

    PHPSTORM/IntelliJ IDEA 常用 设置配置优化 - meetrice 时间 2014-09-06 10:17:00  博客园-所有随笔区 原文  http://www.cnblogs ...

  7. nginx 配置优化的几个参数

    nginx 配置优化的几个参数 2011-04-22 本文地址: http://blog.phpbean.com/a.cn/7/ --水平有限欢迎指正-- -- 最近在服务器上搞了一些nginx 研究 ...

  8. MySQL性能优化之max_connections配置参数浅析

    这篇文章主要介绍了MySQL性能优化之max_connections配置参数浅析,本文着重讲解了3种配置max_connections参数的方法,需要的朋友可以参考下 MySQL的max_connec ...

  9. hadoop配置优化

    yarn-site.xml <property> <name>yarn.nodemanager.resource.memory-mb</name> <valu ...

随机推荐

  1. oracle 编译包的时候,一直提示正在编译

    select b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status from v$lock a , v$session b ...

  2. UVa10082 没有通过

    #include<stdio.h> char s[]={"`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./"},b[100 ...

  3. 图片无损放大软件PhotoZoom分屏预览功能 ,简直好用!

    PhotoZoom是一款智能放大图片软件,很多用户在初次使用PhotoZoom,发现图片所处的区域上方有四个不同方式的预览选项.因为很多初学者使用时不明白这四个按钮有什么作用,所以小编接下来讲解一下P ...

  4. java操作Excel的poi的简介

    一.POI概述 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 结构: HSSF - 提供读写Mi ...

  5. sublim Text3 配置python3环境

    一.安装Sublime Text 3 1.双击下载的.exe文件安装,安装路径不要有中文目录 2.安装Sublime Text 3时,勾选“Add to explorer context menu”, ...

  6. concurrent.futures 学习笔记

    concurrent.futures 先看下官方介绍 The asynchronous execution can be performed with threads, using ThreadPoo ...

  7. IOS - xib(Interface Builder,view) - can't change view size(view不能改变大小问题)

    很多时候,我们自定义tableview.collectionview的cell,也有时候我们要自定义窗口xib,但创建xib后,其height.width不可修改. 这时问题就来了,怎么才能使我们的自 ...

  8. ELO kernels 记录

    these kernel for discuss how to handle outliers in target values. 一:Ashish Gupta: 在16年6月到18年8月,激活卡的人 ...

  9. ELK介绍及搭建 Elasticsearch 分布式集群

    上:https://blog.51cto.com/zero01/2079879 下:https://blog.51cto.com/zero01/2082794

  10. Django入门--模板变量、过滤器及静态文件

    一.模板变量 我们登录页面后,在页面上会显示姓名等信息,姓名就是模板变量,用来显示登陆者的名字,Django对这些数据进行处理后,返回给前端页面,前端页面进行渲染. 1.模板变量语法规则 1)在htm ...