php相关设置
php.ini 中 max_execution_time = 300
php-fpm.conf request_terminate_timeout = 100
基本公式如下:
超时时间 = min(max_execution_time , request_terminate_timeout)
注意 set_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system() ,file_get_contents()的系统调用,流操作,数据库操作等不会被计算在执行时间中,request_terminate_timeout 就是真正的执行时间
如果是 max_execution_time 起作用,http状态码为500 页面会显示最大执行时间等报错信息,而request_terminate_timeout 起作用,http状态码为502 页面返回的内容为nginx502页面
避免没有超时机制的请求
在使用file_get_contents函数时,如果不设置超时,而请求的接口又不能很快的返回时,可能能会导致 request_terminate_timeout 超时,子进程会被kill 系统提示页面报 502,被系统kill后,数据的完整性无法保证,应尽量避免没有超时限制的请求操作,包括mysql的连接,执行,redis的连接等
不同超时设置起作用的状态码
超时设置 | 状态码 |
---|---|
max_execution_time | 500 |
request_terminate_timeout | 502 |
fastcgi_read_timeout | 504 |
proxy_read_timeout | 504 |