我有一个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甚至在高rps的情况下都不会遇到任何高并发。
发布于 2016-10-18 20:37:09
是否所有的请求都属于同一个会话?如果是,this post会指出问题的原因。
从本质上讲,事实证明ASP.NET会话不是线程安全的,您不能拥有来自同一会话的并行请求。ASP.NET将简单地序列化调用并按顺序执行它们。这会导致调用Thread.Sleep()时看到的阻塞。
如果请求来自不同的会话,则不应该有阻塞。在任何情况下,您都可以尝试关闭会话:
<sessionState mode="Off" />https://stackoverflow.com/questions/40108154
复制相似问题