php执行300多秒连接就会断开

发布于 2022-09-07 08:57:06 字数 1414 浏览 76 评论 0

环境:
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多秒服务器连接消失后,未收到来自服务器响应与断开握手包,浏览器一直处于加载状态):
wireshark抓包

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心房敞 2022-09-14 08:57:06

服务器所在机房防火墙问题

流殇 2022-09-14 08:57:06

没用过IIS,但感觉是IIS会有个超时限制,因为nginx或Apache都有这样的限制,php设置了time_limit后php不会超时,你这也确实没有超时,但是浏览器没有响应,说明应该就是web server的问题,你可以查查看

老街孤人 2022-09-14 08:57:06

你可以在cli 模式下,没有限制超时链接

杀お生予夺 2022-09-14 08:57:06

如果是必须浏览器执行,那就需要零时改动执行时间, 可以使用 set_time_limit 函数 设置。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文