我有一个 WCF 服务(用 .NET 4 编写),在 Windows 2008 R2 64 位上的 IIS 7.5 下运行。
我创建了一个测试工具,它会产生 10-20 个(或更多)线程 - 每个线程都会创建一个随机负载并访问服务器。在服务器上,我记录了所有访问,并且可以看到参与 IIS 的线程 ID。
无论有多少客户端请求(同时)到达服务器,服务器都只使用 2 个线程。它基本上在它们之间循环。
但随后,IIS 突然开始使用与我向其发出的请求数量相同的线程。然后它会下降到使用 1 或 2 个线程。
有人可以解释这种行为以及我该如何解决它吗?
答案1
如何调整客户端连接管理设置,
<configuration>
<system.net>
<connectionManagement>
<add address = "http://www.example.org" maxconnection = "4" />
<add address = "*" maxconnection = "2" />
</connectionManagement>
</system.net>
</configuration>
答案2
您肯定达到了 system.net 默认的 2 个连接限制。因此,您需要将每个 IP 允许的 maxConnection 增加到线程数。
<configuration>
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "100" />
</connectionManagement>
</system.net>
</configuration>
如果您使用的是 Windows 7,那么您将达到 IIS 上的最大 25 个请求限制。您必须在 Windows 2008 上进行负载测试才能获得真实数字。
另一件事是客户端可能不会并行执行所有线程。因此,您需要确保客户端确实并行运行所有 100 个线程。
除了这些设置之外,为了扩展 WCF,您还需要进行一些进一步的调整。最常见的调整解释如下:
http://www.codeproject.com/Articles/133738/Quick-Ways-to-Boost-Performance-and-Scalability-of