php-fpm优化

摘要:
有两种方法可以为php-fpm进程设置php-fpm进程池。一个是静态的。您可以直接启动指定数量的php-fpm进程,而无需增加或减少它们;另一个是动态的。在开始时启动一定数量的php-fpm进程。当请求量变大时,动态地将php-fpm进程的数量增加到上限。空闲时,自动将空闲进程的数量释放到下限。2、 超时设置max_execution_Time和request_terminate_Timeout可以将php脚本的超时设置为php的最大值。ini_execution_请求时间和fpm。conf_terminate_ timeout参数在两个位置设置。两者有什么区别?php-fpm中的请求。conf_terminate_Timeout设置单个请求的超时。

一.php-fpm 进程设置

php-fpm进程池开启进程有两种方式,一种是static,直接开启指定数量的php-fpm进程,不再增加或者减少;
另一种则是dynamic,开始时开启一定数量的php-fpm进程,当请求量变大时,动态的增加php-fpm进程数到上限,当空闲时自动释放空闲的进程数到一个下限。

动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗

几个参数设置:

pm = dynamic   //pm参数指定了进程管理方式,有两种可供选择:static或dynamic,从字面意思不难理解,为静态或动态方式
pm.max_children = 100   //static模式下创建的子进程数或dynamic模式下同一时刻允许最大的php-fpm子进程数量,pm.max_spare_servers的值只能小于等于pm.max_children

pm.start_servers = 3  //动态方式下的起始php-fpm进程数量

pm.min_spare_servers = 1   //动态方式下服务器空闲时最小php-fpm进程数量

pm.max_spare_servers = 5   //动态方式下服务器空闲时最大php-fpm进程数量

参数设置建议:一般php-fpm进程占用20~30m左右的内存就按30m算。如果单独跑php-fpm,动态方式起始值可设置物理内存Mem/30M,由于大家一般Nginx、MySQL都在一台机器上,于是预留一半给它们,即php-fpm进程数为$Mem/2/30。

二.超时时间设置max_execution_time(php.ini) 与 request_terminate_timeout(php-fpm)

php脚本超时时间可以在php.ini的max_execution_time和fpm.conf的request_terminate_timeout参数两处进行设置.那么这两者有什么区别呢?

当我们设置php.ini的max_execution_time参数后,zend引擎处理脚本时,其内部会根据设定的时间定义一个定时器(setitimer),这是linux的API。

而fpm.confrequest_terminate_timeout的检测是通过主进程遍历定时事件fpm_pctl_heartbeat来判断PHP脚本执行是否超时。

php.ini中的max_execution_time:

php-fpm优化第1张

这个值限定了脚本的最大执行时间(单位是秒)

set_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中,当该脚本已运行。在测量时间是实值的Windows中,情况就不是如此了。

php-fpm.conf中的request_terminate_timeout

php-fpm优化第2张

设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的max_execution_time因为某些特殊原因没有中止运行的脚本有用。设置为 ‘0’ 表示 ‘Off’。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。

通过上面两个说明及实验验证得出结论,max_execution_time=1,不一定1s后就会中止脚本,可能是2s、3s甚至更长的时间;而request_terminate_timeout=4则就会在4s后中止脚本的执行。所以在配置超时时间的时候,最好两个都配置,max_execution_time时间短一点,而request_terminate_timeout时间长一点

三.开启慢日志

开启慢日志的目的是为了跟踪分析那条php脚本执行的时间超过了设置的request_slowlog_timeout时长,如果超过这个设置时间,那么该脚本就会被记录下

slowlog = log/$pool.log.slow

request_slowlog_timeout = 2

开启php-fpm的慢日志,时间阀值2秒;

四.php-fpm启动、重启、终止

PHP5.3.3后的php-fpm 不再支持php-fpm 以前具有的 /usr/local/php/sbin/php-fpm(start|stop|reload)等命令,需要使用信号控制:

master进程可以理解以下信号

INT, TERM立刻终止
;

QUIT平滑终止
;

USR1重新打开日志文件
;

USR2平滑重载所有worker进程并重新载入配置和二进制模块 ;

先查看php-fpm的master进程号

ps aux|grep php-fpm

php-fpm优化第3张

重启php-fpm:

# kill -USR2 1392

上面方案一般是没有生成php-fpm.pid文件时使用,如果要生成php-fpm.pid,使用下面这种方案:

上面master进程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf这个配置文件,cat/usr/local/php/etc/php-fpm.conf发现:

[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid

pid文件路径应该位于/usr/local/php/var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再kill -USR2 42891 重启php-fpm,便会生成pid文件,下次就可以使用以下命令重启,关闭php-fpm了:

php-fpm 关闭:
kill -INT 'cat /usr/local/php/var/run/php-fpm.pid'
php-fpm 重启:
kill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'

参考:

https://www.zybuluo.com/phper/note/89081

http://blog.itpub.net/14184018/viewspace-1797411/

https://www.cnblogs.com/kenshinobiy/p/7470635.html

https://blog.csdn.net/wzx19840423/article/details/79071928

https://blog.csdn.net/mijar2016/article/details/53709777

免责声明:文章转载自《php-fpm优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Go语言系列】go get 命令介绍Makefile中一些特殊符号的意义下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP curl参数详解(转)

curl_setopt (PHP 4 >= 4.0.2) curl_setopt -- 为CURL调用设置一个选项 描述 bool curl_setopt (int ch, string option, mixed value) curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。...

十个PHP开发者最容易犯的错误

文章引用链接:http://www.phpxs.com/post/5974/ PHP 语言让 WEB 端程序设计变得简单,这也是它能流行起来的原因。但也是因为它的简单,PHP 也慢慢发展成一个相对复杂的语言,层出不穷的框架,各种语言特性和版本差异都时常让搞的我们头大,不得不浪费大量时间去调试。这篇文章列出了十个最容易出错的地方,值得我们去注意。 易犯错误...

PHP 配置文件中open_basedir选项作用

如下是php.ini中的原文说明以及默认配置: ; open_basedir, if set, limits all file operations to the defined directory ; and below. This directive makes most sense if used in a per-directory or ; pe...

「PHP」PHP8.0新特性

经历了近半年的alpha版本测试后,PHP在2020年11月26号正式发布了8.0版本:https://www.php.net/releases/8.0/en.php 现在我们就来浏览一下PHP 8.0中出现的主要特性,以及它给我们安全研究人员带来的挑战。 命名参数 Named Arguments PHP 8 以前,如果我们需要给一个函数的第N个参数传参,...

linux centos8 安装 composer2.0

1 安装前准备 先安装php 再安装php-json扩展 yum install php-json  参考 https://blog.csdn.net/alinathz/article/details/105885254 2 安装 官网安装方法 https://getcomposer.org/download/ php -r "copy('https:/...

PHP 真正多线程的使用

popen 首先popen()函数创建一条管道,方向为父进程的fpout到子进程的stdin,接着popen程序打开in.txt文本并一行一行地读取出来写到管道的fpout端。子进程则从stdin中读取从父进程发送过来的数据显示到stdout中。 PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程。多线程在处理重...