超时问题总结
一、PHP
1、在php.ini里面设置 max_execution_time=30 (一个php程序执行的最长时间。)
或者在代码里设置:
ini_set("max_execution_time", 30);
set_time_limit(30);
作用:防止写得不好的脚本占尽服务器资源。
备注:最大执行时间不会影响系统调用和系统操作等。
对当前会话生效,比如设置0一直不超时,但是如果php的安全模式打开了,这些设置都会不生效。
唯一的解决方法是关闭安全模式或者在 php.ini 中修改时间限制。
2、max_input_time:
脚本解析输入数据(类似 POST 和 GET)允许的最大时间,单位是秒。 它从接收所有数据到开始执行脚本进行测量的。
php-fpm.conf (>=5.3.3)
request_terminate_timeout
php.ini和php-fpm.conf
php.ini:决定php语言运行的环境,支持扩展的模块,开发环境的配置
php-fpm.conf:进程控制管理器配置文件,控制php-cgi的进程数,常驻内存,提高web服务的响应速率,php-cgi运行时会加载这两个配置文件。
二、Nginx
1、
a timeout has occurred while establishing a connection with the
server, passing a request to it, or reading the response header;
2、HTTP 配置中
2.1 keepalive_timeout 10 给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。
2.2 proxy_connect_timeout 10; 后端服务器连接的超时时间_发起握手等候响应超时时间(不能超过75s)
2.3 fail_timeout=10s
这个时间内产生了max_fails所设置大小的失败尝试连接请求后这个服务器可能不可用,同样它指定了服务器不可用的时间(在下一次尝试连接请求发起之前),默认为10秒,fail_timeout与前端响应时间没有直接关系,不过可以使用
3、
proxy_send_timeout :在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
proxy_read_timeout :在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;
三、curl
curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括: CURLOPT_TIMEOUT
设置cURL允许执行的最长秒数。 CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。 (在cURL
7.16.2中被加入。从PHP 5.2.3起可使用) CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。 CURLOPT_CONNECTTIMEOUT_MS
尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。
(来自php手册)curl一个毫秒级超时的问题:
鸟哥博客:http://www.laruence.com/2014/01/21/2939.html/comment-page-1
当你设置了小于1000ms的超时以后, curl不会发起任何请求, 而直接返回错误。 curl_setopt(ch,CURLOPTNOSIGNAL,1);curlsetopt( ch,
CURLOPT_TIMEOUT_MS,899);//超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用
在Linux系统上, 如果使用了系统标准的DNS解析, 则会使用SIGALARM来提供控制域名解析超时的功能,
但是SIGALARM不支持小于1s的超时. curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认启用。
四、file_get_contents() ,fopen超时
1、更改默认使用 php.ini 中设置的 default_socket_timeout。
利用file_get_contents()第三个参数,fopen()第四个参数
context 规定文件句柄的环境。Context 是可以修改流的行为的一套选项。
可以修改HTTP context 的选项,其中就有timeout.
file_get_contents()超时:
<?php
$timeout=array(
"http"=>array("timeout"=>5)
);
$context=stream_context_create($timeout);
$text=file_get_contents(“http://example.com/”,0,$context);
?>
php手册
resource stream_context_create ([ array
创建并返回一个资源流上下文,该资源流中包含了 options 中提前设定的所有参数的值。
备注:这个函数也可以用来 模拟POST/GET
五、 mysql超时
php.ini mysql.connect_timeout=3
my.cnf
interactive_timeout:服务器关闭交互式连接前等待活动的秒数
wait_timeout:服务器关闭非交互连接之前等待活动的秒数,默认值28800秒(即8小时);
connect_timeout:在获取链接时,等待握手的超时时间,只在登录时有效,默认值10秒。
六、浏览器、apache的连接超时
1,在客户端,浏览器控制着浏览器和apache的最大连接超时时间。
2,在服务端(不打开防火墙),linux和apache都不能控制最大连接超时时间,只有php或者mysql等运行程序通过控制自身的执行时间来控制浏览器和apache的最大连接超时时间。(还没测试)