前段时间一位同事跟我说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介绍的更多相关文章

  1. php.ini配置max_execution_time和FPM配置request_terminate_timeout

    PHP限定脚本执行时长的方式有几种,下面说下php.ini中的max_execution_time和php-fpm.conf中的request_terminate_timeout 1. php.ini ...

  2. 关于PHP执行超时的问题

    PHP配置文件的参数max_execution_time表示脚本执行超时时间 max_execution_time=0表示不限制 max_execution_time=2表示执行两秒后终止,同时报错F ...

  3. PHP出现502解决方案

    nginx 出现 502 有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端 php-fpm 处 理有问题,nginx 将正确的客户端请求发给了后端的 php-fpm 进程,但是因为 ph ...

  4. Linux定制化RPM包

    定制化RPM包 1.Linux安装软件方法 1- rpm/yum安装 简单.速度快,但是不能定制安装 RPM RedHat Package Manager(RPM软件包管理器) 2- 二进制安装 解压 ...

  5. mod_php和mod_fastcgi和php-fpm的介绍,对比和性能数据

    1.php中fastcgi和php-fpm是什么东西 最近在研究和学习php的性能方面的知识,看到了factcgi以及php-fpm,发现我对他们是少之又少的理解,可以说几乎是一无所知,想想还是蛮可怕 ...

  6. 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/ ...

  7. fpm 配置详解

    约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...

  8. 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 为俄罗斯访问量第二的 ...

  9. php-fpm介绍及配置

    php-fpm是什么 全称是php fastcgi process manager即php fastcgi进程管理器,相比fastcgi静态的唤起cgi,fpm能根据访问的压力动态的唤起cgi进程和销 ...

随机推荐

  1. 取消导航栏navigationBar的半透明/毛玻璃效果

    iOS 7.0以上的系统,导航栏默认有毛玻璃效果,遮住了颜色 原因是7.0以上的系统,导航栏默认有毛玻璃效果,遮住了颜色,取消掉这个效果就行了. if( ([[[UIDevice currentDev ...

  2. 文件操作命令(rename)

    Rename 命令: // 描述: 重命名文件或目录. // 语法: rename [<Drive>:][<Path>]<FileName1> <FileNa ...

  3. Saltstack_使用指南05_数据系统-Pillar

    1. 主机规划 Pillar文档 https://docs.saltstack.com/en/latest/topics/pillar/index.html 注意事项 修改了master或者minio ...

  4. Hexo自定义页面的方法

    原文转自:http://refined-x.com/2017/07/10/Hexo%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A1%B5%E9%9D%A2%E7%9A%84%E6%9 ...

  5. 滑动窗口最大值的golang实现

    给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值 输入: nums = [, ...

  6. .NET CORE学习笔记系列(2)——依赖注入【3】依赖注入模式

    原文:https://www.cnblogs.com/artech/p/net-core-di-03.html IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架中以实现对流 ...

  7. 实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题

    最近需要https这里看到一份不错的博客,收录一下! Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust ...

  8. 勇者斗恶龙 uva 11292(简单贪心)

    思路:先将龙和士兵进行分别排序从小到大.然后,每次找当前最小龙的第一个大于它的骑手之后退出,开始下一个龙,重复上一次操作. #include<iostream> #include<a ...

  9. loss函数和cost函数

    loss函数指单个样本的预测值和真值的偏差 cost函数指整体样本的预测值和真值的偏差

  10. 迄今为止 .Net 平台功能最强大,性能最佳的 JSON 序列化和反序列化库。

    Swifter.Json 这是迄今为止 .Net 平台功能最强大,性能最佳的 JSON 序列化和反序列化库. Github : https://github.com/Dogwei/Swifter.Js ...