Asp.net
W3WP.EXE 使用 100% CPU - 從哪裡開始?
在 IIS6 上執行的 ASP.NET Web 應用程序會定期將 CPU 提高到 100%。在這些情節中,幾乎所有 CPU 使用都是由 W3WP 負責的。CPU 在幾分鐘到一個多小時內保持 100%。
這是在登台伺服器上,此時該站點僅從測試人員那裡獲得非常少的流量。
我們已經在伺服器上執行了 ANTS 分析器,但它一直沒有啟發性。
我們從哪裡開始找出導致這些事件的原因以及在這段時間裡讓 CPU 忙碌的程式碼是什麼?
- 標準 Windows 性能計數器(查找其他相關活動,例如許多 GET 請求、過多的網路或磁碟 I/O 等);您可以從程式碼和 perfmon 中讀取它們(例如,如果 CPU 使用率超過門檻值,則觸發數據收集)
- 自定義性能計數器(特別是針對執行時間不確定的開箱請求和其他呼叫的時間)
- 負載測試,使用 Visual Studio Team Test 或 WCAT 等工具
- 如果您可以在 IIS 7 上進行測試或升級到 IIS 7,則可以配置 Failed Request Tracing 以在請求花費更多時間時生成跟踪
- 使用 logparser 查看 CPU 峰值時到達的請求
- 程式碼審查/演練(特別是尋找可能無法正確終止的循環,例如是否發生錯誤,以及鎖定和潛在的執行緒問題,例如使用靜態)
- CPU 和記憶體分析(在生產系統上可能很困難)
- 程序瀏覽器
- Windows 資源監視器
- 詳細的錯誤記錄
- 自定義跟踪日誌記錄,包括執行時間詳細資訊(可能是有條件的,基於 CPU 使用性能計數器)
- AppPool 回收時是否會發生錯誤?如果是這樣,它可能是一個線索。