一.php-fpm 进程设置php
php-fpm进程池开启进程有两种方式,一种是static,直接开启指定数量的php-fpm进程,再也不增长或者减小;
另外一种则是dynamic,开始时开启必定数量的php-fpm进程,当请求量变大时,动态的增长php-fpm进程数到上限,当空闲时自动释放空闲的进程数到一个下限。html
动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态建立回收进程对服务器资源也是一种消耗linux
几个参数设置:数据库
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-fpm
当咱们设置php.ini的max_execution_time参数后,zend引擎处理脚本时,其内部会根据设定的时间定义一个定时器(setitimer),这是linux的API。spa
而fpm.confrequest_terminate_timeout的检测是经过主进程遍历定时事件fpm_pctl_heartbeat来判断PHP脚本执行是否超时。
.net
这个值限定了脚本的最大执行时间(单位是秒) 日志
set_time_limit()
函数和配置指令max_execution_time
只影响脚本自己执行的时间。任何发生在诸如使用system()的系统调用,流操做,数据库操做等的脚本执行的最大时间不包括其中,当该脚本已运行。在测量时间是实值的Windows中,状况就不是如此了。
设置单个请求的超时停止时间。该选项可能会对 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