【发布时间】:2014-11-05 09:23:03
【问题描述】:
我正在调查我们的 Web 应用程序存在性能问题。它使用 4 层架构,带有 MVC4 webapp、WCF 数据服务和 SQLServer 作为 DB。 尽管有足够的可用资源,但数据服务并没有真正扩展请求。它似乎只并行回答 10-12 个请求并将所有其他请求排队。我想看到它同时回答 >100 个请求。
- 我尝试使用我找到的所有配置值 WCF 的这个主题:system.net -> connectionManagement -> add maxconnection=100 serviceBehavior -> serviceThrottling -> maxConcurrentCalls/Instances/Sessions=100。没有成功。
- 我尝试使用 httpBinding 以及我发现的 netTcpBinding 将参数 maxConnections 设置为 100。没有成功。
- 是 WCF 吗?我实现了一个简单的 sleep.aspx 网络表单,它有 1s 到 返回(使用 Thread.Sleep())。同样的结果,只有 10-12 个请求 在 1 秒内得到答复,进一步的请求将排队。
- 是 .Net 吗?我在测试机上安装了 ActiveState Perl 并 写了一个同样的小 Perl 脚本。相同的结果,10-12 直接回答请求,其他请求排队。
- 是 Windows 吗?我在 Linux 机器上安装了 Perl 脚本 阿帕奇。测试客户端在 Windows 下运行。在这个星座我 当我将 Apache 配置为具有尽可能多的响应时,在 1 秒内得到 100 个响应 服务器进程。
- IIS 也能够运行多个进程而不是多个 线程(网络花园)也是如此。啊,这种情况下IIS也回答100 并行请求。
所有这一切让我得出结论,单个 Windows 进程可能无法并行处理超过 10-12 个 TCP 连接。
这是真的吗?这可以在某处配置吗?
由于数据服务的设计,它不应该与多个进程一起运行,因为它使用需要与所有其他实例同步的对象缓存。
Google 似乎对此问题知之甚少。
环境:Windows Server 2008 R2/Windows Server 2012 R2、MVC4、WCF、.Net 4.5.1
汤米
【问题讨论】:
标签: c# .net wcf windows-server