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 ...
随机推荐
- [转]SURF算法解析
SURF算法解析 一.积分图像 积分图像的概念是由Viola和Jones提出的.积分图像中任意一点(i,j)的值为原图像左上角到任意点(i,j)相应的对焦区域的灰度值的总和,其数学公式如图1所示 ...
- ESLint 规范项目代码
ESLint 由 JavaScript 红宝书 作者 Nicholas C. Zakas 编写, 2013 年发布第一个版本. NCZ 以可扩展.每条规则独立.不内置编码风格为理念编写了一个 lint ...
- H3C三层交换机S5500初始配置+网络访问策略
DHCP中继配置命令 dhcp relay address-check enable 命令用来使能DHCP 中继的地址匹配检查功能. undo dhcp relay address-check ena ...
- mysql 读写分离 ,mysql_proxy实现
下载安装mysql_proxy: 解压后, 该目录包含已经编译好的二进制文件 . 1: 利用mysql_proxy实现负载均衡 执行mysql_proxy ./mysql-proxy-path/bin ...
- BZOJ 1601: [Usaco2008 Oct]灌水 最小生成树_超级源点
Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. ...
- 路飞学城Python-Day100
Django项目之图书馆项目 1.项目架构 2.表结构设计 from django.db import models # Create your models here. #作者详情表 class A ...
- Node笔记(2)
写一个可以生成多层级文件夹的函数 const fs = require('fs'); const path = require('path'); function mkdirs (pathname,c ...
- Linux 程序包管理-YUM
前端工具YUM管理程序包: rpm管理软件虽然方便,但是需要手工解决软件包的依赖关系:很多时候安装一个软件需要首先安装一个或多个(有时多达上百个)其它软件,手工解决很复杂:使用yum可以解决这个问题 ...
- BA-Johnson楼控简介
- iOS_21团购_地图功能
终于效果图: 右下角的回到用户位置button: MapController控制器, 是主控制器左側dock上面的[地图]button相应的控制器, 继承自ShowDealDetailControll ...