PHP配置优化:php-fpm配置解读
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配置解读的更多相关文章
- TOMCAT 8.5 配置优化以及JVM配置(windows server)
		
下载官方的tomcat,我这里用的是TOMCAT 8.5.46,然后解压出来,解压后的目录如下图 一.server.xml配置优化 进入conf目录,打开server.xml 文件 1. 找到 < ...
 - php.ini配置max_execution_time和FPM配置request_terminate_timeout
		
PHP限定脚本执行时长的方式有几种,下面说下php.ini中的max_execution_time和php-fpm.conf中的request_terminate_timeout 1. php.ini ...
 - elasticsearch7.0安装及配置优化
		
简单讲ES开箱即用,不用任何配置也能玩转搜索引擎:以下内容是根据易企秀线上实际使用场景进行的安装和配置,支持冷热数据分离 1.安装 Linux 环境下载安装包 curl -L -O https://a ...
 - mysql性能优化-慢查询分析、优化索引和配置
		
一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1) max_connec ...
 - VS2010/2012配置优化记录笔记
		
VS2010/2012配置优化记录笔记 在某些情况下VS2010/2012运行真的实在是太卡了,有什么办法可以提高速度吗?下面介绍几个优化策略,感兴趣的朋友可以参考下,希望可以帮助到你 有的时候V ...
 - PHPSTORM/IntelliJ IDEA 常用 设置配置优化
		
PHPSTORM/IntelliJ IDEA 常用 设置配置优化 - meetrice 时间 2014-09-06 10:17:00 博客园-所有随笔区 原文 http://www.cnblogs ...
 - nginx 配置优化的几个参数
		
nginx 配置优化的几个参数 2011-04-22 本文地址: http://blog.phpbean.com/a.cn/7/ --水平有限欢迎指正-- -- 最近在服务器上搞了一些nginx 研究 ...
 - MySQL性能优化之max_connections配置参数浅析
		
这篇文章主要介绍了MySQL性能优化之max_connections配置参数浅析,本文着重讲解了3种配置max_connections参数的方法,需要的朋友可以参考下 MySQL的max_connec ...
 - hadoop配置优化
		
yarn-site.xml <property> <name>yarn.nodemanager.resource.memory-mb</name> <valu ...
 
随机推荐
- (到8.1为止)Android版本名称与内容
			
版本名称 API 主要版本更新时间 Android 1.0 1 测试版本 Android 1.1 2 2008 年9月正式发布的Android第一版 Android 1.5 Cupcake(纸杯 ...
 - django 安装运行
			
pip install django pip list 查看版本 python -m django --version 新建django django-admin startproject mysit ...
 - 软件开发的MVC构架
			
MVC:IDE开发环境开发时,无意中使用的软件结构. 转自于wikipedia:http://zh.wikipedia.org/wiki/MVC 软件的层次划分:框架--组件(设计模式)--算法与数据 ...
 - Swift 字典 Dictionary基本用法
			
import UIKit /* 字典的介绍 1.字典允许按照某个键访问元素 2.字典是由两部分组成, 一个键(key)集合, 一个是值(value)集合 3.键集合是不能有重复的元素, 值集合可以有重 ...
 - load 调用的顺序
			
主要是依赖关系. 调用的顺序 你过去可能会听说过,对于 load 方法的调用顺序有两条规则: 父类先于子类调用 类先于分类调用 这种现象是非常符合我们的直觉的,我们来分析一下这种现象出现的原因. 第一 ...
 - macOS 不用任何第三方工具 简单两步使用 Automator 将截图转成@1x
			
制作 Automator 脚本 打开 Automator -> 选择服务,左侧搜索 shell,双击打开,右侧粘贴以下内容,将上部 服务收到... 改成 没有输入,CMD+S保存,名称就叫 屏幕 ...
 - 文字左右滚动选择,改变direction的值
			
1.从左到右滚动显示<marquee direction=left>测试</marquee> 2.从右到左滚动显示<marquee direction=right> ...
 - JDK源码中的英文注释翻译(Enum<E extends Enum<E>>)
			
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializab ...
 - 如何处理CSS3属性前缀(转载)总结
			
今天闲来无聊,重新来说说CSS3前缀的问题.在春节前和@一丝姐姐说起Sass中有关于gradient的mixins.姐姐说: 为什么还要用mixin呢?为什么不使用Autoprefixer?使用Aut ...
 - vue .sync修饰符
			
.sync 修饰符 对一个 prop 进行“双向绑定”时,真正的双向绑定会带来维护上的问题,因为子组件可以修改父组件,且在父组件和子组件都没有明显的改动来源. 那这个修饰符的原理是什么呢?其实还是vu ...