2010-11-15 77 views
4

我有一個Web服務器,其上運行着多個ASP.NET網站。每隔一段時間,我注意到IIS將服務器的CPU推到100%。這些站點共享應用程序池,每個.NET版本都在運行。如何診斷IIS將CPU推到100%的使用率?

我在尋找的是一種能夠使用某種工具來查明哪個網站正在執行此操作的方法。如果該工具碰巧代碼顯示出來,那也不錯。如果沒有,我很高興知道哪個網站導致問題。

我已經嘗試過使用ANTS。但是,對於ANTS,您需要知道它是哪個站點,然後讓它運行並等待CPU崩潰的Web應用程序。不完美的理想。

任何經驗/想法?

回答

2

使用任務管理器獲取正在佔用所有CPU的進程的PID,然後使用this question的答案將PID與網站匹配。

+0

因此,如果我使用這種方法,我將不得不將所有網站分成獨立的應用程序池? – Micah 2010-11-15 22:00:18

+1

或者做一個二進制搜索。將你的應用分成兩個池。當你看到一個人走的時候,拿走這些應用程序的一半並把它們放在另一個遊戲池中。當你看到一個走得不穩定,...... – codepoke 2010-11-15 22:19:03

0

除了David的(正確)答案之外,一旦您確定了有問題的WS,帶有團隊工具的VS2010在「Analyze」菜單下有一些非常出色的性能分析工具。使用那裏的工具,您應該能夠在短時間內將問題縮小到特定的代碼行。

使用性能分析嚮導非常簡單 - 只需將它指向相關項目,讓它啓動,通過網站上的各種操作運行,它將爲您提供找到問題所需的所有指標(甚至在編輯器中的CPU密集代碼旁邊放置火焰圖標)

0

低技術答案:
+使用任務管理器確定加載的工作進程。
+使用c:\​​ windows \ system32 \ issapp.vbs來識別加載進程的應用程序池名稱 (或者,如果您熟悉該工具,DebugDiag可以更輕鬆地完成同樣的任務。 「進程」選項卡上的應用程序池名稱。)
+創建新的應用程序池並在它們之間拆分應用程序,直到您可以將導致問題的應用程序單獨放入應用程序池爲止。

更多技術答案:
+使用任務管理器確定加載的工作進程 。杭轉儲 ,使用DebugDiag資料 工作進程或ADPlus的-hang -p(的 Windows調試工具,從微軟都 免費下載的一部分)
+ DebugDiag資料可以預先分析的竅門 轉儲你,可能只是給你 你需要的所有線索。這是一個 中等技術解決方案,通常 的作品。您需要查看 進程選項卡並右鍵點擊 違規進程。選擇「全用戶模式 轉儲」或類似的東西。找到 創建的轉儲文件在c:\ Program Files \ DebugDiag \ Logs \ Misc * .dmp和 雙擊它以查看 預分析。
+如果DebugDiag資料不 給你足夠的線索,然後WinDBG的 可以肯定的告訴你你需要什麼 瞭解,雖然它是到甚至, 少得多主開始的神祕和 困難的工具。 (這也是一個整體 很有趣。我強烈推薦它,如果你是管理員和經常問這樣的問題。)

2

檢查IIS調試診斷工具http://support.microsoft.com/kb/919790

另一種方法,打破每個站點爲不同的應用程序池,然後看任務管理器中的應用程序池看到內存使用情況。

+0

快速的問題:這將在64位機器上工作? – IrishChieftain 2010-11-15 22:30:21

+1

@Irish - 測試版中有一個新版本(1.2),可以更好地支持64位窗口。 http://blogs.msdn.com/b/tess/archive/2010/09/30/debug-diag-1-2-beta.aspx你需要給團隊發電子郵件(dbgdiag(at)microsoft.com)以獲得複印件。但他們的回覆很快(對我來說不到1小時)。 – Kev 2010-11-16 00:20:44

+0

很酷,謝謝Kev :-) – IrishChieftain 2010-11-16 04:05:33