php配置文件中的超时时间

本文详细探讨了PHP配置文件中与超时相关的参数,包括`max_execution_time`、`max_input_time`、`process_control_timeout`、`request_terminate_timeout`和`request_slowlog_timeout`。阐述了它们在不同场景下的作用和计算方式,以及如何影响脚本执行和服务器性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

php.ini

  • max_execution_time
  • max_input_time

php-fpm.conf

  • process_control_timeout
  • request_terminate_timeout
  • request_slowlog_timeout

max_execution_time与max_input_time

max_execution_time

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

max_input_time

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

三个阶段

  • php_module_startup
  • php_request_startup
  • php_execute_script

两种情况

  • max_input_time != -1
    • php_module_startup阶段赋值EG(timeout_seconds)=max_execution_time
    • php_request_startup阶段设置定时器,时间为max_input_time
    • php_execute_script阶段重设定时器,时间为max_execution_time
      总结:此时php脚本执行的最大时间为max_input_time+max_execution_time
  • max_input_time = -1
    • php_module_startup阶段赋值EG(timeout_seconds)=max_execution_time
    • 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不能被停止脚本执行的时候)

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

<?php
$a = time();
echo ‘begin’;
for ($i = 0;;$i++) {
	if (time() - $ime > 10) {
	break;
}
}
echo ‘end’;
?>
<?php
	echo ‘begin’;
	sleep(10);
	echo ‘end’;
?>
  • max_execution_time为20,request_terminate_timeout为3
    例子1结果:出现报错,程序执行时间为3秒
    例子2结果:出现报错,程序执行时间为3秒
  • 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错误给客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值