使用100%cpu的WCF Windows服务

时间:2014-01-24 10:23:37

标签: performance wcf windows-services windows-server-2008-r2 cpu-usage

我编写了一个WCF服务,它在运行Windows Server 2008 R2的计算机中作为Windows服务托管。 我的问题是,在24小时的操作中,服务开始消耗100%的CPU,如任务管理器中所示。 现在,我试图找到问题的根源。

我徒劳无功:

  1. 记录所有循环(尝试,捕获等)和服务方法中的错误。
  2. 从任务管理器中读取资源监视器。
  3. 在我的服务上运行性能监视器。
  4. 在Microsoft SQL Server中运行数据库活动监视器(以查看是否有任何锁导致问题)
  5. 这两种方法都没有清楚地了解导致100%cpu利用率的原因。 请告诉我一种可以成功调试的方法。

    提前致谢!!!

1 个答案:

答案 0 :(得分:3)

我去年遇到了这个问题,因为Web服务的行为基本上就像它有内存泄漏一样,慢慢地工作在100%的内存和CPU使用率。

我们发现的一个问题是,我的ServiceHost obj的每个实例(每个请求一个)都使用了一个共同的共享变量(我认为是db连接),它是从运行我的Web服务的可执行程序中借来的,我们已作为Windows服务运行。该共享变量阻止了一些内存被释放。一旦我们消除了共享变量,一些内存和CPU问题就消失了。

我们做的另一件事是将类用于我们的ServiceHost iDisposable,以便我们可以将它放入Using语句中,理论上应当在End Using被击中时完全从内存中卸载对象。

所以这两件事的结合对我们有所帮助,所以希望它可能对你有用。

您可能尝试的另一件事是让您的ServiceHost成为单例类,或者更改您的并发模式。

<ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Multiple, 
InstanceContextMode:=InstanceContextMode.PerCall)>

在我们的例子中,我们运行多个和实例我们的上下文percall,但您可以更改设置并查看问题是否消失。

相关问题