繁体   English   中英

IIS:无法获得高吞吐量

[英]IIS: Unable to get high throughput

我有一个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时都不会遇到任何高并发性。

所有请求都属于同一个会话吗? 如果是这样,则此帖子指示问题的原因。

从本质上讲,事实证明ASP.NET会话不是线程安全的,并且您不能有来自同一会话的并行请求。 ASP.NET将简单地序列化调用并按顺序执行。 这将导致您在调用Thread.Sleep()时看到阻塞。

如果请求来自不同的会话,则不应有阻塞。 无论如何,您都可以尝试关闭会话:

<sessionState mode="Off" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM