概要

php.ini

l  max_execution_time

l  max_input_time

php-fpm.conf

l  process_control_timeout

l  request_terminate_timeout

l  request_slowlog_timeout

max_execution_time与max_input_time

max_execution_time

描述:每个脚本最大可执行时间,cli模式下为0

max_input_time

描述:每个脚本花在解析请求数据上的最大时间,cli模式下为-1

三个阶段

l  php_module_startup

l  php_request_startup

l  php_execute_script

两种情况

l  max_input_time != -1

l  php_module_startup阶段赋值EG(timeout_seconds)=max_execution_time

l  php_request_startup阶段设置定时器,时间为max_input_time

l  php_execute_script阶段重设定时器,时间为max_execution_time

总结:此时php脚本执行的最大时间为max_input_time+max_execution_time

l  max_input_time = -1

l  php_module_startup阶段赋值EG(timeout_seconds)=max_execution_time

l  php_request_startup与php_execute_script阶段设置一个定时器,时间为EG(timeout_seconds)

总结:此时php脚本执行的最大时间为max_execution_time

总结:定时器时间算的是占用cpu的大时间(包括用户态以及内核态),而sleep()这样的系统调用会让进程挂起,不占用cpu时间,因此max_input_time以及max_execution_time时间不包括sleep的

process_control_timeout

描述:process_control_timeout是留给子进程处理来自master进程信号的时间限制

分析:master根据接收到的信号以及当前的大fpm运行状态决定发送给worker进程的是SIGQUIT还是SIGTERM,同时注册时间为process_control_timeout的定时时间,如果在process_control_timeout时间内子进程没退出,master就会升级信号,SIHQUIT->SIGTERM,SIGTERM->SIGKILL,当信号为SIGTERM时还会注册1s的定时事件,留多1秒给worker进程结束,1秒后还未结束,信号升级为SIGKILL,直接终止worker进程

request_terminate_timeout与request_slowlog_timeout

request_terminate_timeout

描述:执行一个请求的超时时间,在这之后worker进程将被终止。(官方解析:此选项应该用在max_execution_time不能被停止脚本执行的时候)

此处引用两个例子来进行说明

例子1代码:

<?php

$a = time();

echo ‘begin’;

for ($i = 0;;$i++) {

if (time() - $ime > 10) {

break;

}

}

echo ‘end’;

?>

例子2代码:

<?php

echo ‘begin’;

sleep(10);

echo ‘end’;

?>

l  max_execution_time为20,request_terminate_timeout为3

例子1结果:出现报错,程序执行时间为3秒

例子2结果:出现报错,程序执行时间为3秒

l  max_execution_time为3,request_terminate_timeout为20

例子1结果:程序终止,程序运行时间为3秒

例子2结果:结果正常

总结:max_execution_time算的是占用cpu的时间(也就是脚本自身执行的时间)类似system(),sleep(),操作数据库等的时间不算在内;request_terminate_timeout算的是worker的时间;

request_slowlog_timeout

描述:执行一个请求的超时时间,在这之后的php的backtrace会被输出到slowlog中

master心跳检测中心跳时间heartbeat的简化算法

算法目的:查看worker进程状态,其中包括是否已超时

规则:

  1. 开启reqeust_terminate_timeout的情况下:heartbeat = reqeust_terminate_timeout/1000*3
  2. 未开启request_terminate_timeout的情况下:heartbeat = request_slowlog_timeout/1000*3或者为0
  3. request_terminate_timeout >= request_slowlog_timeout

ps:此处如果由于request_terminate_timeout导致超时的发生的话,会直接kille掉worker进程,之后内核挥手client_socket,nginx返回502错误给客户端

[php]配置文件中的超时时间的更多相关文章

  1. 在使用jjwt时在配置文件中设置过期时间,取到的结果为0的原因

    在设置了过期时间后感觉没有起作用,打印日志查看了下为0,因为生成token的文件在一个公共模块中,而过期时间设置在服务模块 中的配置文件中. 原因是:没有为设置getter和setter方法 来自为知 ...

  2. nginx中的超时配置

    nginx.conf配置文件中timeout超时时间设置 client_header_timeout 语法 client_header_timeout time默认值 60s上下文 http serv ...

  3. 【Spring Cloud 源码解读】之 【如何配置好OpenFeign的各种超时时间!】

    关于Feign的超时详解: 在Spring Cloud微服务架构中,大部分公司都是利用Open Feign进行服务间的调用,而比较简单的业务使用默认配置是不会有多大问题的,但是如果是业务比较复杂,服务 ...

  4. 设置linux中tcp默认的20秒connect超时时间(转)

    无论你用任何语言或者是网络库,你都可以设置网络操作的超时时间,特别是connect.read.write的超时时间. 你可以在代码中把超时时间设置任意大小值,但是connect方法会有一点特殊. co ...

  5. 设置php下载文件的超时时间

    使用curl 可以使用curl自己实现一个curl_file_get_contents函数 //CURLOPT_FOLLOWLOCATION TRUE 时将会根据服务器返回 HTTP 头中的 &quo ...

  6. C# UdpClient 设置超时时间

    /********************************************************************** * C# UdpClient 设置超时时间 * 说明: ...

  7. TCP连接的超时时间

    无论你用任何语言或者是网络库,你都可以设置网络操作的超时时间,特别是connect.read.write的超时时间. 你可以在代码中把超时时间设置任意大小值,但是connect方法会有一点特殊. co ...

  8. GRUB2配置详解:默认启动项,超时时间,隐藏引导菜单,配置文件详解,图形化配置

    配置文件详解: /etc/default/grub # 设定默认启动项,推荐使用数字 GRUB_DEFAULT=0 # 注释掉下面这行将会显示引导菜单 #GRUB_HIDDEN_TIMEOUT=0 # ...

  9. config文件中可以配置查询超时时间

    web.config配置数据库连接 第一种:获取连接字符串 首先要定义命名空间 system.configuration 1.  string connstr= string constr = Con ...

随机推荐

  1. vue中全局/按需引用element,样式都不生效

    简直是天坑啊,这个问题困扰了我一个晚上加今天一天,心里无数草泥马奔腾 被要求使用vue1.0+elementUI做一个后台管理项目,结果无论怎么操作elementUI,页面中都不显示css样式 谷歌百 ...

  2. django(django学习) 两张表创建 插入数据

      pycharm中直接创建django项目 输入创建项目名(如first_django) 在此输入应用名(如g_tu) 此为项目总目录 将first_django中settings.py中第58行修 ...

  3. k8s 部署 Java 项目

    前几天安装了 k8s 并测试了自动伸缩功能(HPA),今天来部署一个简单的 Java 应用到 k8s. 开始之前需要先安装一下 ingress 插件.ingress 作为 k8s 的流量入口,有多种实 ...

  4. 第14.8节 Python中使用BeautifulSoup加载HTML报文

    一. 引言 BeautifulSoup是一个三方模块bs4中提供的进行HTML解析的类,可以认为是一个HTML解析工具箱,对HTML报文中的标签具有比较好的容错识别功能.阅读本节需要了解html相关的 ...

  5. HDFS客户端操作(JAVA代码)

    环境准备 windows需要配置hadoop的windows下的依赖 安装包地址: 链接:https://pan.baidu.com/s/1QtbH-x-S0QytkmaoSosdEw 提取码:2kt ...

  6. IAR FOR STM8 同一个工程芯片选择003F3可以编译003K3提示空间不足

    同一个工程文件,选择103F3可以编译通过,但是选择103K3便提示空间不足 百思不得其解,查阅大量资料无果.最后在IAR工程里面找到了配置文件 打开003f3的配置文件和003K3配置文件进行对比, ...

  7. 在Linux中使用Dbeaver等GTK3界面的软件出现频繁闪烁的问题解决

    问题复现 复现环境LinuxMint 19 Dbeaver: 7.3 输入法: ibus + ibus-table-wubi 如图,当光标移动到Sql Editor中会不停的闪-- 解决过程 先百度. ...

  8. JVM命令手册

    原文链接:https://blog.csdn.net/qq_41345773/article/details/93895532 aconst_null 将null对象引用压入栈iconst_m1 将i ...

  9. AcWing 316 .减操作

    题目链接 大型补档计划 没想出来去看题解了... 关键是发现无论怎样括号嵌套,每个元素始终只有对答案的贡献为 + a[i] 或者 - a[i]. 而且第一个必然贡献是 +1, 第二个必然是 -1. 所 ...

  10. P6007 [USACO20JAN]Springboards G

    本题解仅用与作者加深算法理解,也欢迎大家的阅读 做题背景 原本关于二维的点的 \(dp\) 问题一直都没有什么想法,昨天晚上再做一道 \(cdq\) 的题目的时候被同学询问了这道题,发现可以用二维偏序 ...