长时间运行脚本期间服务器无响应


Server unresponsive during long running script

我有一个在IIS7上运行的网站。为了更好地解释我的问题,我将用一个简单的场景来展示它。假设我有两个网页,index.phpreport.php,每个内容如下:

index . php

<?php echo "Hello World"; ?>

report.php

<?php sleep(60); //simulate a long running script like generating reports. ?>

index.php是我们的电子商务系统的主页,访问者将访问和report.php是在管理人员查看报告的页面,只要他们喜欢(最有可能在白天)。问题是,当查看需要几分钟才能生成的报告时,整个服务器将变得无响应。在报告生成完成之前,访问index.php的访问者不会得到任何响应。这也适用于ASP.NET。有什么解决办法吗?

这解释了iis6 &7. 本质上,一个新线程处理每个新的传入请求。因此,让单个页面休眠一段时间不会对其他页面的处理产生影响。我用两个页面进行了测试。

page.aspx:

<%@ Page Language="C#" %>
<%=DateTime.Now.ToString() %>

index.aspx:

<%@ Page Language="C#" %>
<%=DateTime.Now.ToString() %>
<% System.Threading.Thread.Sleep(10000); %>

调用了index。aspx页面。Aspx可以重复调用&返回每个请求的当前时间,同时索引第一个请求。Aspx正在睡眠

如果某些东西导致请求在您的服务器上阻塞,它可能是跨站点使用的共享资源。在上面的例子中,如果索引。aspx请求对资源(比如文件或数据库)的独占访问,对页面的多个请求。Aspx将不得不等到索引。Aspx完成了&已释放资源