我有一个IIS应用程序;在我们的应用程序的负载测试期间,我们发现吞吐量非常低。在尝试解决问题时,我们运行了测试 - 加载测试页面,该页面返回大约1000字节的静态数据,并在控制器中进行休眠。我们发现,如果睡眠持续时间大约为1秒,则IIS在1秒内无法在超过10 rps的负载下提供请求。
现在我读到了并发请求以及如何发布.Net 4.5,默认值为5000.因此,如果IIS正在处理5000个并发请求,那么为什么它无法以10 rps的速度提供请求,每个请求需要1秒?数学没有加起来。
请注意,返回静态数据,数据大小很小,所有功能都是休眠。所以没有像CPU,磁盘,网络等机器参数超限。服务器几乎没有闪烁。
这是整个控制器代码
public ActionResult Contact()
{
Thread.Sleep(1000);
return View();
}
那里的视图返回一些静态HTML;我使用Visual Studio模板创建了Web应用程序;模板返回静态HTML。
当我移除睡眠时,我在高速运行时运行服务器没有问题。但随后请求完成得如此之快,即使在高rps下,IIS也不会遇到任何高并发性。
答案 0 :(得分:0)
所有请求都属于同一个会话吗?如果是,this post表示问题的原因。
实际上,事实证明,ASP.NET会话不是线程安全的,并且您不能从同一会话获得并行请求。 ASP.NET将简单地序列化调用并按顺序执行它们。这会导致您在致电Thread.Sleep()
时看到阻止。
如果请求来自不同的会话,则不应该阻止。在任何情况下,您都可以尝试消除会话:
<sessionState mode="Off" />