超时时间
在web开发中,超时会被大量的提及,有的时候需要调大超时时间,有的时候要调下超时时间。有以下几个典型的场景:
1. 在请求量特别的时候,如果webserver超时时间特别长,可能会引发5xx错误,服务器响应不及时,甚至服务器被压跨。同样的情况,也会出现在applicationserver和后端服务(例如数据库)上。这个时候需要设置一个较小的超时时间。
2. 当在一个请求过程中的时候,可能对多个后端服务进行请求的时候,可能由于其中一个服务的超时,导致整个过程的中其他服务也被占用。整个时候需要根据服务的重要程度进行灵活的处理。
3. 当需要用户上传,或者两个(多个)服务进行长时间数据交互的时候。因为传输的数据量特别大,或者传输的速度比较慢等情况,需要设置较长的超时时间。
无论是何种情况,都需要了解web服务器和应用服务器的超时设置,本文以lighttpd,php为例说明这个超时过程。
lighttpd
在lighttpd的配置中有如下的关于超时的配置:
//上传文件大小
server.max-request-size = 1024
//同时存活的请求总数
server.max-keep-alive-requests = 16
//在等待过程请求总数
server.max-keep-alive-idle = 5
//多进行控制器,因为lighttpd相对于apache是io复用的,是否开启多个没有明显区别
server.max-worker = 3
//用户传输数据过程最大的停顿时间
server.max-read-idle = 60
//向用户输出数据过程中最大的停顿时间
server.max-write-idle = 360
//用户传输数据最大的超时时间,用户上传文件需要关注这个时间
server.read-timeout = 720
//服务器传输数据最大的超时时间
server.write-timeout = 2400
//服务器最大的处于等待状态的请求总数
server.max-connection-idle = 60
php
安全模式
在了解php设置的之前,需要预先了解关于php安全模式的内容:
PHP 的安全模式是为了试图解决共享服务器(shared-server)安全问题而设立的。在结构上,试图在 PHP 层上解决这个问题是不合理的,但修改 web 服务器层和操作系统层显得非常不现实。因此许多人,特别是 ISP,目前使用安全模式。
php安全安全模式如果开启,会限制某些php函数调用,以及文件的读取。
如下的关于超时的设置将在安全模式下不起作用:
set_time_limit()
max_execution_time
超时配置
php设置如果是采用php-fpm模式的话,会有两个地方进行配置,一个是php.ini,一个是php-fpm.conf两个配置文件:
max_execution_time = 30;
max_input_time = 60;
php.ini中超时的配置
<value name ="request_terminate_timeout">15s</value>
php-fpm中超时的配置
在php-fpm模式下,request_terminate_timeout会覆盖max_execution_time。
特别需要指出的是这个地方的超时时间只包含php脚本的执行时间,如果等待状态的时间是不会被计入超时时间的。也就是说,有可能某个请求总的处理时间可能远远大于max_execute_time。
浙公网安备 33010602011771号