PHP配置优化:php

Stella981 等级 465 0 0

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手动安装扩展
#### 进入源码目录下的EXT cd php/ext/* #### 使用PHP安装扩展工具phpize /usr/local/php/bin/phpize #### 进入源码目录编译安装 可以看到再EXT目录下生成里一些文件,执行 ./configure --enable-* --with-php-c
Ubuntu 下 Apache2 和 PHP 服务器环境配置
Ubuntu 下 Apache2 和 PHP 服务器环境配置 ============================== 1、简介 ---- 本文主要是 Ubuntu 下 Apache2 和 PHP 服务器环境配置方法,同样适用于 Debian 系统:Ubuntu 20.0.4 注意:文中运行的命令基本上需要管理员权限 2、安装 Apache
11.32 php扩展模块装安装
1.32 php动态扩展模块安装 ---------------- **注:** 本节操作使用PHP7。 查看PHP模块: [root@cham002 ~]# /usr/local/php/bin/php -m [PHP Modules] bz2 Core ctype date dom e
Bootstrap 结合 PHP ,做简单的登录以及注册界面及功能
登录实现 ==== HTML代码 <div class="container"> <?php if (isset($error_msg)): ?> <div class="alert alert-danger" role="alert"><?php echo $error_msg; ?></div>
CentOS 6.4 安装 media wiki 1.23.6(转)
准备: === CentOS 6.4系统及Root或者sudo权限,系统正常连接网络 使用到的软件: ======= apache ,mysql-server ,php ,mediawiki ,memcached 软件包的安装 ====== 首先,需要安装apache, php, mysql-server, mysql-client等相关软件包
CentOS 6.5 PHP(PHP
[CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (二)PHP(PHP-FPM)安装篇](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.cnblogs.com%2Fppoo24%2Fp%2F4920106.htm
CentOS 7下搭建MediaWiki环境
一、安装php、httpd和mariadb [root@dellnode1 ~]# yum install -y mariadb-server mariadb httpd 导入php的repo源: rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Centos配置nginx+php
添加第三方源: yum install epel-release 安装nginx: yum install nginx 安装php: yum install php php-fpm php-mbstring php-mysql php-gd php-fastcgi php-cgi 安装redis: yum ins
Kafka学习之(三)Centos下给PHP开启Kafka扩展(rdkafka)
Centos版本:Centos6.4,PHP版本:PHP7。 在上一篇文章中使用IP为192.168.9.154的机器安装并开启了Kafka进行了简单测试,充当了Kafka服务器。 本篇文章新开启一台IP为192.16.9.157的机器给PHP开启扩展。 找到github的扩展下载地址,这里是php-rdkafka,虽然php有一个扩展是php-kaf
LNMP架构之php
本文索引: * php-fpm的进程pool设置 * php-fpm慢执行日志 * open\_basedir参数设置 * php-fpm进程管理 * * * ### php-fpm的pool php-fpm.conf可以设置多个pool,在其中一个pool资源耗尽,会导致其他站点无法访问资源,报502错误。有必要把站点进行分离,分别
Larave
作者 -- 本文由 张舫 童鞋投稿 > 同时也欢迎更多的小伙伴投稿 开发需求 ---- PHP >= 7.0.0OpenSSL PHP ExtensionPDO PHP ExtensionMbstring PHP ExtensionTokenizer PHP ExtensionXML PHP ExtensionApache/NginxMySQ
Linux下php安装Redis扩展
1 安装redis /usr/local/php/bin/phpize #用phpize生成configure配置文件 ./configure --with-php-config=/usr/local/php/bin/php-config #配置 1 make #编译 2 make install #安装
PHP7中用opcache.file_cache导出脚本opcode实现源代码保护
停止php-fpm(apache同理): sudo /png/php/7.0.0/png\_fpm stop 创建opcode缓存目录: mkdir -m 777 /png/php/opcache\_file\_cache 在php.ini中配置: zend\_extension=/png/php/7.0.0/lib/php/
PHP的前世今生
大家都知道,Facebook、淘宝等早期都是用PHP写的,在中国,PHP在百度、新浪、腾讯这三大互联网公司中应用比较多。 自1995年由丹麦人Rasmus Lerdorf(雷斯莫斯·勒道夫) 创建 PHP 以来, PHP 语言经历了激烈的演进。 ### PHP/FI - 1995年 _摘要:用Perl写的小工具_ PHP 继承自一个老的工程,名叫 P
PHP配置优化:php
> PHP-FPM是一个PHP FastCGI管理器,php-fpm.conf配置文件用于控制PHP-FPM管理进程的相关参数,比如工作子进程的数量、运行权限、监听端口、慢请求等等。 我们在编译安装PHP的时,在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。PHP-FPM配置文件为 php-fpm.conf,其语法类似 p