Asp.net

W3WP.EXE 使用 100% CPU - 從哪裡開始?

  • January 12, 2010

在 IIS6 上執行的 ASP.NET Web 應用程序會定期將 CPU 提高到 100%。在這些情節中,幾乎所有 CPU 使用都是由 W3WP 負責的。CPU 在幾分鐘到一個多小時內保持 100%。

這是在登台伺服器上,此時該站點僅從測試人員那裡獲得非常少的流量。

我們已經在伺服器上執行了 ANTS 分析器,但它一直沒有啟發性。

我們從哪裡開始找出導致這些事件的原因以及在這段時間裡讓 CPU 忙碌的程式碼是什麼?

  1. 標準 Windows 性能計數器(查找其他相關活動,例如許多 GET 請求、過多的網路或磁碟 I/O 等);您可以從程式碼和 perfmon 中讀取它們(例如,如果 CPU 使用率超過門檻值,則觸發數據收集)
  2. 自定義性能計數器(特別是針對執行時間不確定的開箱請求和其他呼叫的時間)
  3. 負載測試,使用 Visual Studio Team Test 或 WCAT 等工具
  4. 如果您可以在 IIS 7 上進行測試或升級到 IIS 7,則可以配置 Failed Request Tracing 以在請求花費更多時間時生成跟踪
  5. 使用 logparser 查看 CPU 峰值時到達的請求
  6. 程式碼審查/演練(特別是尋找可能無法正確終止的循環,例如是否發生錯誤,以及鎖定和潛在的執行緒問題,例如使用靜態)
  7. CPU 和記憶體分析(在生產系統上可能很困難)
  8. 程序瀏覽器
  9. Windows 資源監視器
  10. 詳細的錯誤記錄
  11. 自定義跟踪日誌記錄,包括執行時間詳細資訊(可能是有條件的,基於 CPU 使用性能計數器)
  12. AppPool 回收時是否會發生錯誤?如果是這樣,它可能是一個線索。

引用自:https://stackoverflow.com/questions/2052633