优化IIS和ASP.net以获得最大请求数/秒

时间:2015-06-12 04:15:42

标签: asp.net iis asp.net-web-api amazon-ec2

我需要一个Web应用程序,能够以每秒非常多的请求进行操作,同时保持响应时间非常短(小于~70ms)。

出于测试目的,我启动了3个c4.xlarge ec2实例并将它们放入弹性负载平衡器中。

我有一个看起来像这样的方法。

expectPOST

我希望其中一个实例能够每秒处理数千个请求(因为它基本上什么都不做)。令我惊讶的是,我在每秒处理300个请求时遇到问题,而CPU没有达到高位,并且请求开始排队。

此处查看其中一个实例的性能,每秒约240个请求。

Performance Monitor

正如您所看到的,我已经有19个排队请求,而处理器是78%。 (此外,我的上下文切换到8-9K左右,看起来很高)。

所有3台服务器都会发生这种情况。

我在服务器上更改的内容

machine.config相关行

[HttpPost]
[Route("api/test/rps")]
public IHttpActionResult TestRequestsPerSecond(MediumSizedObject testObj)
{
    return new StatusCodeResult(HttpStatusCode.NoContent, Request);
}

生产网络配置(可能)相关行

 <processModel autoConfig="true"
                   maxWorkerThreads="100"
                   maxIoThreads="100"
                   minWorkerThreads="50"
                   minIoThreads="50" />
    <httpRuntime
        minFreeThreads="176"
        minLocalRequestFreeThreads="152"
        />

我尝试使用默认的machine.config,但情况稍差。

出于某种原因,每秒大约130个请求,我们只有30%的CPU,几乎没有请求排队。

我必须要有一些神奇的设置。这与IIS的课程相提并论吗?这可能是WebAPI 2的罪魁祸首吗? (如果有人认为那些会有所帮助的话,我可以测试Nancy或ServiceStack。)

我需要更大的实例吗?

任何建议或要寻找的事情,调整都会很棒。

(我让WebApi Action返回一个Task来查看它是否有任何区别,但它并没有)

1 个答案:

答案 0 :(得分:0)

您必须在processModel元素中更改的其他属性生效之前,将processModel元素中autoconfig的值设置为“false”。