2011-04-15 40 views
3

我的所有網站都託管在IIS中,並配置有一個應用程序池。此應用程序池包含10個運行的網站。工作進程佔用高CPU%

它一直運行良好,直到今天,但突然間我觀察到CPU使用率突然上升和下降百分比。我無法找出問題所在。

是否有無論如何檢查哪個網站在應用程序池中承擔了大量的負載?

+1

擁有應用程序池的重點在於,您可以將應用程序彼此隔離,並且不會有一個應用程序支配資源。當然,你可以做一些應用程序級別的跟蹤來弄清楚發生了什麼,但是最好是將事情分解到自己的池中。 – Brook 2011-04-15 17:37:49

+0

大多數網站是靜態的,除了一個。這就是原因,所有這些都是使用單個應用程序池配置的。 – max 2011-04-15 17:57:43

回答

0

如果你的服務器達到了它的最大容量,你將會看到CPU不停地上下運行,因爲GC會開始嘗試恢復資源(cache..etc),這反過來會導致你的網站工作更加困難。這是一個無休止的循環。

你一直在監視你的性能計數器嗎?你知道你的網站的容量是多少?如果您無法回答這些問題,我建議您儘快收集一些性能數字。我的經驗法則是總是先測量,然後進行必要的修改。

大部分時間性能瓶頸並不在你認爲他們會在的地方。

0

由於CPU計數器處於進程級別,因此實際上沒有性能計數器的方法來說明。你最好的選擇是與事件日誌中的其他事件和.NET/ASP.NET計數器進行垃圾收集,請求等時間相關。

如果你真的想去核心,你可以使用SysInternals工具集隨着時間的推移捕捉您的應用程序池的快照,然後進行後期分析以找出發生高峯期時執行的代碼。以下是來自Mark Russinovich博客的一個相關示例 - http://blogs.technet.com/b/markrussinovich/archive/2008/04/07/3031251.aspx

1

性能計數器,任務管理器和本地代碼分析工具只能說明部分故事。爲了更深入地瞭解ASP.NET應用程序中發生的事情,您需要使用WinDBG,SOS和ADPlus。

Tess Ferrandez有一個偉大的一系列關於追查文章有什麼怪的位置:

.NET Debugging Demos Lab 4: High CPU hang
.NET Debugging Demos Lab 4: High CPU Hang - Review

這是一個真實的例子:

High CPU in .NET app using a static Generic.Dictionary

您可能希望將您的網站劃分爲單獨的應用程序池,以便您可以識別並隔離導致高CPU的網站(但它看起來像您有嫌疑人,因此我會隔離該網站)。從那以後,您可以按照苔絲的建議和指導來追蹤原因。

您還應該查看日誌,看看您是否遇到意外的高峯或流量增加。也許有一個表現不佳的搜索引擎網站索引器釘住了該網站。如果是這種情況,那麼也許你需要(如果你還沒有這樣做)創建一個robots.txt,以防止抓取工具將不需要建立索引的站點索引編入索引。最重要的是,如果某些爬蟲過於寬容,那麼就禁止他們。也許考慮一個谷歌的網站地圖馴服和調整其活動。