我编写了一个WCF服务,它在运行Windows Server 2008 R2的计算机中作为Windows服务托管。 我的问题是,在24小时的操作中,服务开始消耗100%的CPU,如任务管理器中所示。 现在,我试图找到问题的根源。
我徒劳无功:
这两种方法都没有清楚地了解导致100%cpu利用率的原因。 请告诉我一种可以成功调试的方法。
提前致谢!!!
答案 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,但您可以更改设置并查看问题是否消失。