WCF无法达到100%的CPU。瓶颈是什么?

时间:2011-11-17 14:52:17

标签: wcf performance

我正在对自托管nettcp WCF服务进行基准测试,从50个线程向位于同一台计算机上的服务发出请求。问题是Xeon E3-1270的CPU利用率从未超过35%。当我在两核笔记本电脑上运行相同的测试时,它确实达到了100%。

WCF方法不执行任何操作,因此不应受IO限制。我试图增加线程数,但这没有用。每个线程都创建一个服务通道,并执行重用该通道实例的数千个调用。

这是我正在使用的服务类:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class TestService : ITestService
{
    public void Void()
    {
        // DO NOTHING
    }
}

CONFIGS:

ServiceThrottlingBehavior:     MaxConcurrentCalls = 1000     MaxConcurrentInstances = 1000,     MaxConcurrentSessions = 1000

NetTcpBinding的     ListenBacklog = 2000     MaxConnections = 2000

1 个答案:

答案 0 :(得分:1)

我会尝试将InstanceContextMode更改为 PerCall 。我很确定您的当前配置设置将被忽略,因为WFC只会创建一个类的单个实例并按顺序处理它们。使用PerCall,将为每个请求创建一个新实例,直到达到最大线程数或配置限制。您也不需要netTcpBinding设置,但要保持您的限制行为,但要确保您的比例正确,否则可能会产生不利影响。

  • MaxConcurrentCalls:16 *处理器计数
  • MaxConcurrentSessions:100 *处理器计数
  • MaxConcurrentInstance:Sum(116 * Processor Count)