2012-12-11 125 views
1

我們正在運行一個windows服務,每5秒鐘檢查一次文件夾中的文件,如果發現使用NLog記錄有關它的一些信息。空載CPU佔用率高

我已經試過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

我不知道在哪裏繼續。任何幫助讚賞

+0

該圖像不是非常有用,因爲它不包含信息在哪裏花了多少時間。所有這些都可能是冷碼。 – usr

+0

你能發表一些代碼嗎? – usr

+0

其實我不行。它太多了。這就是爲什麼我試圖使用一些工具來獲取信息的原因 – amaters

回答

1

經過大量挖它不得不做這個:

該服務曾與參數Y

私有對象X每次服務被解僱X傳遞給業務邏輯。 Y被使用並最終被處置。垃圾收集器將等待直到X被處置,這將永遠不會發生,直到服務重新啓動。每次啓動服務時,這會導致額外的GC等待線程。

1

誰寫這個Windows服務?是你還是第三方?

對我來說,每5秒檢查一次文件夾的變化聽起來真的很可疑,也許是你得到這種大規模放緩的主要原因。

如果你做得對,你可以在發生變化時立即獲得目錄變化,但在做這些時幾乎不會花費CPU時間。

此Microsoft文章解釋瞭如何精確地做到這一點:使用功能FindFirstChangeNotificationFindNextChangeNotificationReadDirectoryChangesWWaitForMultipleObjectsObtaining Directory Change Notifications

+0

我們編寫了Windows服務。 5秒間隔確實很高,但不會導致問題。我已經能夠使用5秒重現行爲。使用500秒只需花費很長時間來重現相同的行爲 – amaters