[php]配置文件中的超时时间
概要
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进程状态,其中包括是否已超时
规则:
- 开启reqeust_terminate_timeout的情况下:heartbeat = reqeust_terminate_timeout/1000*3
- 未开启request_terminate_timeout的情况下:heartbeat = request_slowlog_timeout/1000*3或者为0
- request_terminate_timeout >= request_slowlog_timeout
ps:此处如果由于request_terminate_timeout导致超时的发生的话,会直接kille掉worker进程,之后内核挥手client_socket,nginx返回502错误给客户端
[php]配置文件中的超时时间的更多相关文章
- 在使用jjwt时在配置文件中设置过期时间,取到的结果为0的原因
在设置了过期时间后感觉没有起作用,打印日志查看了下为0,因为生成token的文件在一个公共模块中,而过期时间设置在服务模块 中的配置文件中. 原因是:没有为设置getter和setter方法 来自为知 ...
- nginx中的超时配置
nginx.conf配置文件中timeout超时时间设置 client_header_timeout 语法 client_header_timeout time默认值 60s上下文 http serv ...
- 【Spring Cloud 源码解读】之 【如何配置好OpenFeign的各种超时时间!】
关于Feign的超时详解: 在Spring Cloud微服务架构中,大部分公司都是利用Open Feign进行服务间的调用,而比较简单的业务使用默认配置是不会有多大问题的,但是如果是业务比较复杂,服务 ...
- 设置linux中tcp默认的20秒connect超时时间(转)
无论你用任何语言或者是网络库,你都可以设置网络操作的超时时间,特别是connect.read.write的超时时间. 你可以在代码中把超时时间设置任意大小值,但是connect方法会有一点特殊. co ...
- 设置php下载文件的超时时间
使用curl 可以使用curl自己实现一个curl_file_get_contents函数 //CURLOPT_FOLLOWLOCATION TRUE 时将会根据服务器返回 HTTP 头中的 &quo ...
- C# UdpClient 设置超时时间
/********************************************************************** * C# UdpClient 设置超时时间 * 说明: ...
- TCP连接的超时时间
无论你用任何语言或者是网络库,你都可以设置网络操作的超时时间,特别是connect.read.write的超时时间. 你可以在代码中把超时时间设置任意大小值,但是connect方法会有一点特殊. co ...
- GRUB2配置详解:默认启动项,超时时间,隐藏引导菜单,配置文件详解,图形化配置
配置文件详解: /etc/default/grub # 设定默认启动项,推荐使用数字 GRUB_DEFAULT=0 # 注释掉下面这行将会显示引导菜单 #GRUB_HIDDEN_TIMEOUT=0 # ...
- config文件中可以配置查询超时时间
web.config配置数据库连接 第一种:获取连接字符串 首先要定义命名空间 system.configuration 1. string connstr= string constr = Con ...
随机推荐
- pthread 互斥量
参考文献: [1] https://computing.llnl.gov/tutorials/pthreads/ 温故知新 在 OS 中,每个进程都独立地拥有: Process ID, process ...
- `prometheus-net.DotNetRuntime` 获取 CLR 运行指标原理解析
prometheus-net.DotNetRuntime 介绍 Intro 前面集成 Prometheus 的文章中简单提到过,prometheus-net.DotNetRuntime 可以获取到一些 ...
- 【万字长文】Dubbo 入门总结 ,一款高性能的 Java RPC 框架
这篇文章是我学习整理 Dubbo 的一篇文章,首先大部分内容参考了官网 + 某硅谷的视频,内容讲解进行了重新编排,40多张图片,也都是我修改重制的,虽然一万多字,但是其实也可以看出来,更多的内容集中在 ...
- PyQt(Python+Qt)学习随笔:QMainWindow的splitDockWidget方法将QDockWidget停靠窗分割排列
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 主窗口的splitDockWidget方法用于将一个停靠窗占据的空间分 ...
- PyQt(Python+Qt)学习随笔:QTreeWidget的topLevelItemCount属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeWidget的topLevelItemCount属性是一个只读属性,用于保存树型部件中顶层 ...
- 第11.21节 Python 中正则表达式的其他扩展功能
一. 引言 在<第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用>中老猿介绍了组匹配模式的命名组功能及引用组功能,这两者都是正则表达式的扩展功能,其实在re模块中 ...
- Python(Python+Qt)学习随笔:使用xlwings新建Execl文件和sheet的方法
在<Python学习随笔:使用xlwings读取和操作Execl文件>介绍了使用xlwings读取和操作Execl文件的方法,但老猿这两天写个例子使用时,发现使用该文的方法无法新建EXCE ...
- buuctfweb刷题wp详解及知识整理----[安洵杯 2019]easy_web
尝试之路加wp 观察源代码和get所传参数可猜测img所传参数img就是该图片经过两次base64编码和一次hex编码后可得555.png成果验证猜测 然后发现该图片以data元数据封装的方式放到了源 ...
- 【笔记】「pj复习」深搜——拿部分分
说在最前面 众所周知, NOIP pj 的第三题大部分都是 dp ,但是有可能在考场上想不到动态转移方程,所以我们就可以拿深搜骗分. 方法 深搜拿部分分 剪枝 记忆化 看数据范围 有时候发现,写完深搜 ...
- 题解-CF1139D Steps to One
题面 CF1139D Steps to One 一个数列,每次随机选一个 \([1,m]\) 之间的数加在数列末尾,数列中所有数的 \(\gcd=1\) 时停止,求期望长度 \(\bmod 10^9+ ...