首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET Debug 系列 (二):Hang 假死除錯實戰 - BuggyBits FeaturedProducts.aspx 案例

     編輯:關於ASP.NET

Tess Debug 系列第二篇,Hang 除錯實戰。問題+結果結構,機器差異不影響原理掌握。

問題重現

  1. 瀏覽 https://localhost/BuggyBits/FeaturedProducts.aspx (約 5 秒呈現)
  2. 同時開啟 5 瀏覽器存取同頁
  3. 需執行 InternetConnections.reg 修改登錄允許更多並發連線

觀察結果

瀏覽器回應時間
15.0s
29.1s
312.57s
416.07s
518.61s

每請求遞增 ~5 秒,CPU 使用率極低 (0-5%)。

Hang 成因分析

  1. 所有 Request 等待單一 Thread 獨佔資源 (序列化瓶頸)
  2. 等待外部資源不可用 (資料庫連線池耗盡、Web Service 逾時、鎖競爭)

取得 Dump 步驟

  1. 命令列切至 Debugger 目錄,輸入 adplus -hang -pn w3wp.exe -quiet (暫不按 Enter)
  2. 另開命令列執行 tinyget -srv:localhost -uri:/BuggyBits/FeaturedProducts.aspx -threads:30 -loop:50 產生併發
  3. 請求發送期間,回到 ADPlus 視窗按 Enter 產生 Dump

關鍵差異

  • -hang:立即產生 Dump (按 Enter 那一刻)
  • -crash:等待程式滿足崩潰條件才產生

後續分析

Windbg 載入 Dump → .load sos → !threads 檢視所有 Managed Thread → 找出阻塞 Thread → !clrstack 定位呼叫堆疊 → 識別鎖/資源競爭程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved