PHP-max_execution_time与fpm.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脚本执行是否超时。
下面通过实例进行分析。
example:
$a = time();
var_dump('begin');
for($i=0;;$i++){
if(time()-$a>10){
break;
}
}
var_dump('end');
上面的代码比较容易理解,首先,输出“begin”字符串,10秒后再输出“end”字符串。
方案1:修改php.ini的配置max_execution_time
=3,fpm.conf的request_terminate_timeout
=20.
example执行的结果:
string(5) "begin"
hrome浏览器抓包:
根据上面运行的结果和效果图可以看出,example运行3秒后中止。也就是说,此时,php.ini的max_execution_time生效了。
方案2:修改php.ini的配置max_execution_time=20,fpm.conf的request_terminate_timeout=3.
example执行的结果:
chrome浏览器抓包:
从上面的截图可以看出,程序也只执行了3S。此时脚本的运行受到fpm.conf的request_terminate_timeout配置影响。
从上面两个方案推断出,对于example实例,php脚本取max_execution_time与request_terminate_timeout最小值作为脚本的超时时间。那是不是只要设置max_execution_time参数即可呢?
下面继续分析,我们对example代码稍微调整下。
$a = time();
var_dump('begin');
sleep(10);
var_dump('end');
这段代码与上面功能类似,唯一的区别是由循环改成sleep()。
采用方案1的配置,结果如下:
string(5) "begin" string(3) "end"
采用方案2的配置,结果如下:
example执行的结果:
对比两个结果可以看出此时max_execution_time的配置未起到效果。以下是引用php手册的一段话(http://php.net/manual/zh/function.set-time-limit.php):
set_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中,当该脚本已运行。在测量时间是实值的Windows中,情况就不是如此了。
SO,为了保证生产环境的安全,建议同时设置max_execution_time和request_terminate_timeout参数值。
PHP-max_execution_time与fpm.request_terminate_timeout介绍的更多相关文章
- php.ini配置max_execution_time和FPM配置request_terminate_timeout
PHP限定脚本执行时长的方式有几种,下面说下php.ini中的max_execution_time和php-fpm.conf中的request_terminate_timeout 1. php.ini ...
- 关于PHP执行超时的问题
PHP配置文件的参数max_execution_time表示脚本执行超时时间 max_execution_time=0表示不限制 max_execution_time=2表示执行两秒后终止,同时报错F ...
- PHP出现502解决方案
nginx 出现 502 有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端 php-fpm 处 理有问题,nginx 将正确的客户端请求发给了后端的 php-fpm 进程,但是因为 ph ...
- Linux定制化RPM包
定制化RPM包 1.Linux安装软件方法 1- rpm/yum安装 简单.速度快,但是不能定制安装 RPM RedHat Package Manager(RPM软件包管理器) 2- 二进制安装 解压 ...
- mod_php和mod_fastcgi和php-fpm的介绍,对比和性能数据
1.php中fastcgi和php-fpm是什么东西 最近在研究和学习php的性能方面的知识,看到了factcgi以及php-fpm,发现我对他们是少之又少的理解,可以说几乎是一无所知,想想还是蛮可怕 ...
- PHP 优化之php -fpm 进程
一,php-fpm的启动参数 1 2 3 4 5 6 7 8 9 10 11 12 13 #测试php-fpm配置 /usr/local/php/sbin/php-fpm -t /usr/local/ ...
- fpm 配置详解
约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...
- LNMP搭建(CentOS 6.3+Nginx 1.2.0+PHP 5.3.15(fpm)+ MySQL 5.5.35)
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 ...
- php-fpm介绍及配置
php-fpm是什么 全称是php fastcgi process manager即php fastcgi进程管理器,相比fastcgi静态的唤起cgi,fpm能根据访问的压力动态的唤起cgi进程和销 ...
随机推荐
- #017 python实验课第五周
总结写在最前面: 1.语法还是不会...(每周强制留的C语言一百题都没空写PS.团委诶....)都是现查现用(莫凡Python这个网站特别好用知识点一个视频就一分钟B站的播放器没广告,用啥学啥,还配有 ...
- 周末班:Python基础之面向对象基础
面向对象基础 面向对象和面向过程 编程思想是什么,就是用代码解决现实生活中问题的思路. 面向过程 核心点在过程二字,过程指的是解决问题的步骤,说白了就是先做什么再干什么.这种解决问题的思路就好比是工厂 ...
- Linux-基础学习(二)-基本部署
开始今日份整理 1. 系统优化部分 1.1 Linux防火墙安全相关(重要) 1.1.1 SELinux功能 SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA ...
- Maven的继承以及import作用域
Maven的pom文件中可继承的元素包括: groupId:项目ID,项目坐标核心元素 version:项目版本 description:描述信息 organization:组织信息 inceptio ...
- python之UUID
#!/usr/bin/python # -*- coding: UTF- -*- import uuid ''' uuid1():这个是根据当前的时间戳和MAC地址生成的,最后的12个字符408d5c ...
- C# — Windows服务安装后自动停止问题
今天在使用VS创建一个Windows服务时,为了得到一些提示,引用了Windows.Forms程序集,然后使用MessageBox.Show()方法渴望得到一些弹窗提示: 但是最后在安装好服务后,在任 ...
- iOS开发基础-九宫格坐标(6)
继续对iOS开发基础-九宫格坐标(5)中的代码进行优化. 优化思路:把字典转模型部分的数据处理操作也拿到模型类中去实现,即将 ViewController 类实现中 apps 方法搬到 WJQAppI ...
- SQL的一些基础查询语法
基础.限定.模糊查询 关键字都是大写. 使用 BETWEENN AND 的时候小的数字或者日期放到 AND(并且) 的面前,大的一个放到AND 后面. 数据操纵语言SQL分类(DML ...
- vi/vim 使用
1. vim一共有4个模式:(linux下最好用的编辑器) 正常模式 (Normal-mode) 插入模式 (Insert-mode) 命令模式 (Command-mode) 可视模式 (Visua ...
- Java的selenium代码随笔(5)
//以下七种方法主要用于生成年.月.日.小时.分钟和秒的信息,用于生成保存截图的文件目录名和文件名/** 格式化输出日期* * @return 返回字符型日期*/public static Strin ...