IIS 调试技术之 Debug Diagnostic (调试诊断)
1 概述
1.1 文档简介
系统出现错误或崩溃,免不了要进行调试。调试能进行的前提是错误能重现,但实际上要重现一个错误有时比重新设计代码还困难,所以在错误出现之时,能够及时把系统状态记录下来是当务之急,即我们所说的抓取 DUMP (内存转储文件)。
如何抓取 DUMP?可以使用 WinDbg 或 Debug Diagnostic Tool 抓取。但是相对而言,使用Debug Diagnostic Tool 抓取更方便,而使用WinDbg分析相对而言更简单和便捷一些,所以本文我们将介绍①Debug Diagnostic Tool手动和自动抓取过程②WinDbg的分析过程。大家可以在平常的测试过程中将Debug Diagnostic Tool这个工具安装在服务器上,开启后设置自动抓取,一定会有你意想不到的收获的。
2 Debug Diagnostic Tool
先介绍一下 Debug Diagnostic Tool,此工具常用的功能主要有两个:抓取 DUMP 和分析 DUMP。另外,它还可以附加到进程进行调试,或是监视内存和句柄的泄漏。可以进行手动抓取DUMP和根据设置自动抓取DUMP。
下面我们就来看看如何使用 Debug Diagnostic Tool 抓取 DUMP。(工具安装很简单,这里不进行介绍)
2.1 手动抓取 DUMP
这里我们将用应用程序池IIS来进行说明的,我们只要在 Debug Diagnostic Tool 中的 Processes 标签页中找到对应的进程名为“w3wp.exe”的进程,然后右键选择“Create Full Userdump”即可。
不过通常情况下,我们会用应用程序池把不同的站点和虚拟目录分开,这时系统里会有多个名为“w3wp.exe”的进程。我们可以在命令提示符下执行“iisapp”,得到进程 ID 与应用程序池的对应关系,然后在 Debug Diagnostic Tool 中根据进程 ID 选取要抓取 DUMP 的进程。
2.2 自动抓取 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的触发值,至此所有的设置即可完成。
3 分析DUMP
在工具的 Advanced Analysis 标签页,点击“Add Data Files”按钮,选择要进行分析的 DUMP 文件。再选择可用的分析脚本和数据文件,点击“Start Analysis”即可开始分析。第一次进行分析,工具会到微软网站下载调试文件,所以会有点慢。
工具可供使用的分析脚本有两个:Crash/Hang
Analyzers (崩溃/挂起分析) 和 Memory Pressure Analyzers (内存压力分析)。
Crash/Hang 分析的结果会列出各个线程的执行时间,最后调用的 Function 等,如果有线程阻塞,也会给出警告信息。
内存压力分析的结果主要是内存使用情况,如内存碎片率、空闲内存大小、保留内存大小、使用内存大小等,每个模块、线程、堆使用内存的情况都有列出。
这个工具分析 DUMP 的功能不如 WinDbg,具体的分析我们还得用 WinDbg 了。下面我们来介绍一下WinDbg分析功能。
3.1 WinDbg分析功能
前面提过Debug Diagnostic Tool也可以对DUMP进行分析,只不过相对而言WinDbg更可用一些,但是个人认为DUMP难搞一些,因为通过很多命令来实现的,很多命令是需要上网查的,大家可以根据自己的喜好进行选择,这里简单介绍一下WinDbg的分析功能。
第1步:打开一个dmp文件,点击WinDbg界面上的【File=>Open Crash Dump...】按钮,来打开一个dmp文件。
第2步:在WinDbg的命令输入框输入相应的命令,得到想要发内容信息。(WinDbg命令很多,网上有命令大全,大家可以参考)。
4 结束语
我们的关键是发现系统缺陷,保存缺陷产生过程中的重要信息,我们可以在日常的测试工作中,时刻关注系统生成的一些重要信息,例如错误日志和这些DUMP文件,将这些错误信息提供给开发工程师进行分析。从目前来看这个工具对我们很重要,所以建议大家学会使用。这里我只给大家简单的引入了工具,更多的使用方法和使用技巧大家可以在网上自行学习和试用哦!