一.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:
这个值限定了脚本的最大执行时间(单位是秒)
set_time_limit()
函数和配置指令max_execution_time
只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中,当该脚本已运行。在测量时间是实值的Windows中,情况就不是如此了。
php-fpm.conf中的request_terminate_timeout
设置单个请求的超时中止时间。该选项可能会对 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:
# 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