我的所有網站都託管在IIS中,並配置有一個應用程序池。此應用程序池包含10個運行的網站。工作進程佔用高CPU%
它一直運行良好,直到今天,但突然間我觀察到CPU使用率突然上升和下降百分比。我無法找出問題所在。
是否有無論如何檢查哪個網站在應用程序池中承擔了大量的負載?
我的所有網站都託管在IIS中,並配置有一個應用程序池。此應用程序池包含10個運行的網站。工作進程佔用高CPU%
它一直運行良好,直到今天,但突然間我觀察到CPU使用率突然上升和下降百分比。我無法找出問題所在。
是否有無論如何檢查哪個網站在應用程序池中承擔了大量的負載?
如果你的服務器達到了它的最大容量,你將會看到CPU不停地上下運行,因爲GC會開始嘗試恢復資源(cache..etc),這反過來會導致你的網站工作更加困難。這是一個無休止的循環。
你一直在監視你的性能計數器嗎?你知道你的網站的容量是多少?如果您無法回答這些問題,我建議您儘快收集一些性能數字。我的經驗法則是總是先測量,然後進行必要的修改。
大部分時間性能瓶頸並不在你認爲他們會在的地方。
由於CPU計數器處於進程級別,因此實際上沒有性能計數器的方法來說明。你最好的選擇是與事件日誌中的其他事件和.NET/ASP.NET計數器進行垃圾收集,請求等時間相關。
如果你真的想去核心,你可以使用SysInternals工具集隨着時間的推移捕捉您的應用程序池的快照,然後進行後期分析以找出發生高峯期時執行的代碼。以下是來自Mark Russinovich博客的一個相關示例 - http://blogs.technet.com/b/markrussinovich/archive/2008/04/07/3031251.aspx。
性能計數器,任務管理器和本地代碼分析工具只能說明部分故事。爲了更深入地瞭解ASP.NET應用程序中發生的事情,您需要使用WinDBG,SOS和ADPlus。
Tess Ferrandez有一個偉大的一系列關於追查文章有什麼怪的位置:
.NET Debugging Demos Lab 4: High CPU hang
.NET Debugging Demos Lab 4: High CPU Hang - Review
這是一個真實的例子:
您可能希望將您的網站劃分爲單獨的應用程序池,以便您可以識別並隔離導致高CPU的網站(但它看起來像您有嫌疑人,因此我會隔離該網站)。從那以後,您可以按照苔絲的建議和指導來追蹤原因。
您還應該查看日誌,看看您是否遇到意外的高峯或流量增加。也許有一個表現不佳的搜索引擎網站索引器釘住了該網站。如果是這種情況,那麼也許你需要(如果你還沒有這樣做)創建一個robots.txt
,以防止抓取工具將不需要建立索引的站點索引編入索引。最重要的是,如果某些爬蟲過於寬容,那麼就禁止他們。也許考慮一個谷歌的網站地圖馴服和調整其活動。
擁有應用程序池的重點在於,您可以將應用程序彼此隔離,並且不會有一個應用程序支配資源。當然,你可以做一些應用程序級別的跟蹤來弄清楚發生了什麼,但是最好是將事情分解到自己的池中。 – Brook 2011-04-15 17:37:49
大多數網站是靜態的,除了一個。這就是原因,所有這些都是使用單個應用程序池配置的。 – max 2011-04-15 17:57:43