Kyl*_*bel 7 asp.net iis amazon-ec2 asp.net-web-api
我需要一个Web应用程序,能够以每秒非常多的请求进行操作,同时保持响应时间非常短(小于~70ms).
出于测试目的,我启动了3个c4.xlarge ec2实例并将它们放入弹性负载平衡器中.
我有一个看起来像这样的方法.
[HttpPost]
[Route("api/test/rps")]
public IHttpActionResult TestRequestsPerSecond(MediumSizedObject testObj)
{
return new StatusCodeResult(HttpStatusCode.NoContent, Request);
}
Run Code Online (Sandbox Code Playgroud)
我希望其中一个实例能够每秒处理数千个请求(因为它基本上什么都不做).令我惊讶的是,我无法在没有CPU变高的情况下每秒处理300个请求,并且请求开始排队.
以下是每秒240个请求的实例之一的性能.
正如您所看到的,我已经有19个排队请求,处理器是78%.(另外我的上下文切换到8-9K左右,看起来很高).
这发生在所有3台服务器上.
我在服务器上改变了一些事情
machine.config相关行
<processModel autoConfig="true"
maxWorkerThreads="100"
maxIoThreads="100"
minWorkerThreads="50"
minIoThreads="50" />
<httpRuntime
minFreeThreads="176"
minLocalRequestFreeThreads="152"
/>
Run Code Online (Sandbox Code Playgroud)
生产web配置(可能)相关的行
<system.web>
<sessionState mode="Off" />
<authentication mode="None" />
<compilation targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<remove name="PassportAuthentication" />
<remove name="Profile" />
<remove name="AnonymousIdentification" />
<remove name="WindowsAuthentication" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
我尝试使用默认的machine.config,但只是有点糟糕.
由于某种原因,每秒约130个请求,我们只有30%的CPU,几乎没有请求排队.
我必须要有一些神奇的设置.这与IIS的课程相提并论吗?这可能是WebAPI 2的责任吗?(如果有人认为那些会有所帮助的话,我会去测试Nancy或ServiceStack).
我需要更大的实例吗?
任何建议或要寻找的东西,调整都会很棒.
(我让WebApi Action返回一个Task来查看它是否有任何区别,但它没有)
归档时间: |
|
查看次数: |
928 次 |
最近记录: |