IIS 調試技術之 Debug Diagnostic (調試診斷)web
系統出現錯誤或崩潰,免不了要進行調試。調試能進行的前提是錯誤能重現,但實際上要重現一個錯誤有時比從新設計代碼還困難,因此在錯誤出現之時,可以及時把系統狀態記錄下來是當務之急,即咱們所說的抓取 DUMP (內存轉儲文件)。服務器
如何抓取 DUMP?可使用 WinDbg 或 Debug Diagnostic Tool 抓取。可是相對而言,使用Debug Diagnostic Tool 抓取更方便,而使用WinDbg分析相對而言更簡單和便捷一些,因此本文咱們將介紹①Debug Diagnostic Tool手動和自動抓取過程②WinDbg的分析過程。你們能夠在日常的測試過程當中將Debug Diagnostic Tool這個工具安裝在服務器上,開啓後設置自動抓取,必定會有你意想不到的收穫的。app
先介紹一下 Debug Diagnostic Tool,此工具經常使用的功能主要有兩個:抓取 DUMP 和分析 DUMP。另外,它還能夠附加到進程進行調試,或是監視內存和句柄的泄漏。能夠進行手動抓取DUMP和根據設置自動抓取DUMP。工具
下面咱們就來看看如何使用 Debug Diagnostic Tool 抓取 DUMP。(工具安裝很簡單,這裏不進行介紹)性能
這裏咱們將用應用程序池IIS來進行說明的,咱們只要在 Debug Diagnostic Tool 中的 Processes 標籤頁中找到對應的進程名爲「w3wp.exe」的進程,而後右鍵選擇「Create Full Userdump」便可。學習
不過一般狀況下,咱們會用應用程序池把不一樣的站點和虛擬目錄分開,這時系統裏會有多個名爲「w3wp.exe」的進程。咱們能夠在命令提示符下執行「iisapp」,獲得進程 ID 與應用程序池的對應關係,而後在 Debug Diagnostic Tool 中根據進程 ID 選取要抓取 DUMP 的進程。
測試
要自動抓取 DUMP,就必須設定一些抓取 DUMP 的條件,當系統情況知足條件時,Debug Diagnostic Tool 會根據要求抓取指定進程的 DUMP。Debug Diagnostic Tool 的抓取條件分三種:Crash(系統崩潰)、Performance (系統性能資源) 和 Memory and Handle Leak (內存和句柄泄漏)。網站
第1步:在工具的 Rules 標籤頁,點擊「Add Rule...」按鈕,開始添加一個抓取 DUMP 的規則。因爲目前咱們系統暴露出來的問題主要是WEB服務器中CPU異常,因此這裏咱們選擇「Performance」。再選擇「performance counters」,選擇咱們要跟蹤的服務器性能計數器,下一步。線程
第2步:在配置選項中,選擇咱們要跟蹤的服務器性能計數器,本次我須要監控的是系統CPU佔用率。添加完成後「下一步」。
設計
第3步:好比咱們要跟蹤 web application pool (WEB應用程序池) 錯誤,則要在dump target 設置中添加異常設置「web application pool」,將 web application pool name 設置爲咱們測試的應用程序「ihou.APIServer」。
第4步:在配置選項中,配置進行一系列的配置,便可完成。
第5步:在配置項中在配置「性能監視器的觸發特性」,「Rules」中雙擊上面步驟中所添加的Rules Type,在打開的properties of performance monitor trigger頁中設置DUMP的觸發值,至此全部的設置便可完成。
在工具的 Advanced Analysis 標籤頁,點擊「Add Data Files」按鈕,選擇要進行分析的 DUMP 文件。再選擇可用的分析腳本和數據文件,點擊「Start Analysis」便可開始分析。第一次進行分析,工具會到微軟網站下載調試文件,因此會有點慢。
工具可供使用的分析腳本有兩個:Crash/Hang Analyzers (崩潰/掛起分析) 和 Memory Pressure Analyzers (內存壓力分析)。
Crash/Hang 分析的結果會列出各個線程的執行時間,最後調用的 Function 等,若是有線程阻塞,也會給出警告信息。
內存壓力分析的結果主要是內存使用狀況,如內存碎片率、空閒內存大小、保留內存大小、使用內存大小等,每一個模塊、線程、堆使用內存的狀況都有列出。
這個工具分析 DUMP 的功能不如 WinDbg,具體的分析咱們還得用 WinDbg 了。下面咱們來介紹一下WinDbg分析功能。
前面提過Debug Diagnostic Tool也能夠對DUMP進行分析,只不過相對而言WinDbg更可用一些,可是我的認爲DUMP難搞一些,由於經過不少命令來實現的,不少命令是須要上網查的,你們能夠根據本身的喜愛進行選擇,這裏簡單介紹一下WinDbg的分析功能。
第1步:打開一個dmp文件,點擊WinDbg界面上的【File=>Open Crash Dump...】按鈕,來打開一個dmp文件。
第2步:在WinDbg的命令輸入框輸入相應的命令,獲得想要發內容信息。(WinDbg命令不少,網上有命令大全,你們能夠參考)。
咱們的關鍵是發現系統缺陷,保存缺陷產生過程當中的重要信息,咱們能夠在平常的測試工做中,時刻關注系統生成的一些重要信息,例如錯誤日誌和這些DUMP文件,將這些錯誤信息提供給開發工程師進行分析。從目前來看這個工具對咱們很重要,因此建議你們學會使用。這裏我只給你們簡單的引入了工具,更多的使用方法和使用技巧你們能夠在網上自行學習和試用哦!