php执行300多秒连接就会断开
环境:
win2008 r2(64位) iis7.5 php5.5.38(nts-vs11-x86)
php运行方式:fastcgi。
测试代码
$start = microtime(true);
set_time_limit(0); //不限制执行时间
@ini_set('memory_limit', '-1');//不限制内存
$file = './' . time() . '.txt';
for($i = 0; $i < 350; $i++){
echo "$i\n";
ob_flush();
flush();
sleep(1);
file_put_contents($file, $i . ':'. round(microtime(true) - $start, 3)."秒\n", FILE_APPEND);
}
file_put_contents($file, $i . "finished\n", FILE_APPEND);
echo 'finished';
问题描述:
php脚本执行300多秒后(300~320秒),tcp连接就会断开(cmd中执行"netstat -ano | findstr 'ip地址'"命令,300多秒连接消失),此时php-cgi.exe还在继续执行(iis工作进程中可以看到,测试代码还在不断写文件)。等到测试代码执行完毕(向文件中写出了"finished"),浏览器还是一直处于加载状态(使用wireshark抓取数据包,没有发现服务器发送响应数据与断开握手包,300秒内的代码正常)。
相关配置:
iis应用程序池:
连接超时:
fastcgi:
还尝试将注册表项"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\KeepAliveTime"的值改为了7200000,关闭防火墙与其他安全防护软件,都是一样的情况。
但完全相同的软件与配置,在另一台win2008 r2服务器上连接就不会中断。
wireshark抓包(在300多秒服务器连接消失后,未收到来自服务器响应与断开握手包,浏览器一直处于加载状态):
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
服务器所在机房防火墙问题
没用过IIS,但感觉是IIS会有个超时限制,因为nginx或Apache都有这样的限制,php设置了time_limit后php不会超时,你这也确实没有超时,但是浏览器没有响应,说明应该就是web server的问题,你可以查查看
你可以在cli 模式下,没有限制超时链接
如果是必须浏览器执行,那就需要零时改动执行时间, 可以使用
set_time_limit
函数 设置。