【发布时间】:2014-01-16 20:54:31
【问题描述】:
我有一个简单的 .NET 4.5 HttpHandler,它似乎无法扩展到超过 10 个并发请求。我期待一个更高的数字。处理程序只是休眠一秒钟并返回一个简单的字符串。
concurrent requests requests/minute
1 60
8 480
9 540
10 600
11 600
12 600
15 600
32 600
512 600
我有一台 64 位 Win7 机器,配备 4 核 i7、32GB 内存和 SSD,在所有测试期间机器处于空闲状态。 IIS 是开箱即用的配置。我还尝试使用由 Codeplex 的 IISTuner 创建的应用程序池运行它,但结果没有变化。
在真/假之间改变 IsReusable 没有任何作用。
我在 web.config 中添加了一个条目来禁用会话状态。我正在使用 SoapUI 进行测试,并在每个请求标志设置后关闭连接(并且可以在 http 标头中看到这一点)。同样,似乎没有任何改变。
修改每个应用程序池的进程数确实会增加数量,但仍然无法达到我预期的吞吐量(成百上千的并发请求)。
这里是处理程序:
class TestHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
Thread.Sleep(1000);
context.Response.Write("I slept for 1s");
}
public bool IsReusable { get { return true; } }
}
这里是相关的 web.config 文件:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<sessionState mode="Off" timeout ="20" cookieless="false"></sessionState>
</system.web>
<system.webServer>
<handlers>
<add name="Proposal01_Test" verb="*"
path="*.test"
type="Proposal01.TestHandler, Proposal01"
resourceType="Unspecified" />
</handlers>
</system.webServer>
</configuration>
我错过了什么?
【问题讨论】:
-
你能在服务器上试试吗?各种版本的 Windows 客户端风格强加了各种任意连接限制。
-
(事实上,快速的谷歌搜索确认了 Windows 7 上的 IIS 7.5 限制为 10 个并发请求)
-
@Damien - 这确实是问题所在;将其移动到 Win2k8 虚拟机上可以扩展超过 10 个并发请求。谢谢!可悲的是,VM 似乎无法扩展到超过 20-30 个请求,但吞吐量确实在不断上升,所以我们没有遇到这样的问题 - 但这是另一篇文章......
标签: concurrency iis-7.5 httphandler