高CPU使用率,无负载

时间:2012-12-11 09:58:24

标签: performance windows-services cpu

我们正在运行一个Windows服务,每5秒检查一个文件夹中的文件,如果找到则使用NLog记录一些信息。

我已经尝试了ASP.NET: High CPU usage under no load的建议而没有成功。

当服务刚刚启动时,几乎没有任何CPU使用率。几个小时后,我们看到CPU峰值达到100%,经过一些等待后,cpu图看起来像:

windows task manager

我尝试了http://blogs.technet.com/b/sooraj-sec/archive/2011/09/14/collecting-data-using-xperf-for-high-cpu-utilization-of-a-process.aspx中描述的步骤来生成有关正在发生的事情的信息:

xperf overview

我不知道从哪里继续。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

谁写了这个Windows服务?是你还是第三方?

对我来说,每隔5秒检查一次文件夹的变化听起来真的很可疑,也许是导致这种大幅减速的主要原因。

如果你做得对,你可以在发生时立即更改目录,但在这样做的时候几乎没有CPU时间。

这篇Microsoft文章通过使用函数FindFirstChangeNotificationFindNextChangeNotificationReadDirectoryChangesWWaitForMultipleObjects来解释如何做到这一点:Obtaining Directory Change Notifications

答案 1 :(得分:1)

经过大量挖掘后,它与此有关:

该服务有一个私有对象X,其属性为Y

每次启动服务时,X都会传递给业务逻辑。有Y使用,最后处理。然后垃圾收集器将等待,直到X被释放,这将在服务重新启动之前永远不会发生。每次激活服务时都会导致额外的GC等待线程。