中小研发团队架构实践之消费情况诊断对象WinD


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

消费状况偶然会涌现一些非常题目,WinDbg或GDB是处理此类题目的利器。调试工具WinDbg犹如大夫的听诊器,是体系抱病时做题目诊断的逆向剖析工具,Dump文件类似于飞机的黑匣子,纪录着消费状况顺序运转的状况。本文主要引见了调试工具WinDbg和抓包工具ProcDump的运用,并分享一个实在的案例。N年前不知谁写的代码,致使每一两个月偶然涌现CPU飙高的征象。我们先运用ProcDump在消费状况中抓取非常历程的Dump文件,然后在不相识代码的状况下经由历程WinDbg敕令举行剖析,终究定位到有题目的那行代码。

一、诊断工具简介 1.1 WinDbg

WinDbg是在Windows平台下的、壮大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的装置文件巨细较小,然则其调试功用,却比VS越发壮大。它的别的一个用处是可以或许用来剖析Dump数据。WinDbg是Microsoft公司免费调试器调试鸠合中的GUI的调试器,支撑Source和Assembly两种情势的调试。WinDbg不只可以或许调试应用顺序,还可以或许举行Kernel Debug。连系Microsoft的Symbol Server,可以或许猎取体系标记文件,便于应用顺序和内核的调试。WinDbg支撑的平台包孕x86、IA64、AMD64。虽然WinDbg也供应图形界面操纵,但它最壮大的处所照样有着壮大的调试敕令,一样平常状况会连系GUI和敕令行举行操纵,常常使用的视图有:局部变量、全局变量、挪用栈、线程、敕令、寄存器、白板等。个中“敕令”视图是默许翻开的。

1.2 DebugDiag

DebugDiag末了是为了资助剖析IIS的机能题目而开辟的,它一样可以或许用于任何其他的历程。DebugDiag工具主要用于资助处理如挂起、 速度慢、 内存走漏或内存碎片,和任何用户情势历程瓦解等题目。该工具包孕附加调试剧本,侧重于互联网信息效劳(IIS)应用顺序、 Web数据接见组件、 COM 和相干Microsoft手艺、SharePoint和.NET。它供应可扩大工具模子中的COM工具的情势,并具有一个内置的申报框架供应的剧本主机。它由3 局部构成,包孕调试效劳、 调试器主机和用户界面。

1.3 ProcDump

ProcDump是System Internal供应的一个特地用来监测顺序CPU高运用率从而天生历程Dump文件的工具。ProcDump可以或许依据体系的CPU运用率或许指定的机能计数器来针对特定历程天生一系列的Dump文件,以便调试者对变乱缘由举行剖析。

二、诊断工具下载
  • WinDbg x86位版本下载:【http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi】
  • WinDbg x64位版本下载:【http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi】
  • DebugDiag v2下载:【https://www.microsoft.com/en-us/download/details.aspx?id=49924】
  • ProcDump v9.0下载:【https://download.sysinternals.com/files/Procdump.zip】
三、猎取非常历程的Dump文件

有以下四种体式格局猎取Dump文件,细致以下:

3.1 经由历程【义务管理器】猎取Dump文件,如许猎取的是MinDump

3.2 应用WinDbg的adplus猎取Dump文件,如许猎取的是FullDump

3.3 经由历程DebugDiag建立.NET非常转储Dump文件

3.4 经由历程ProcDump抓取非常线程Dump文件

如今重点引见经由历程ProcDump抓取非常线程Dump文件,运用要领以下:

a. 敕令行:
procdump [-a] [[-c|-cl CPU usage] [-u] [-s seconds]] [-n exceeds] [-e [1 [-b]] [-f <filter,...>] [-g] [-h] [-l] [-m|-ml commit usage] [-ma | -mp] [-o] [-p|-pl counter threshold] [-r] [-t] [-d <callback DLL>] [-64] <[-w] <process name or service name or PID> [dump file] | -i <dump file> | -u | -x <dump file> <image file> [arguments] >] [-? [ -e]
b. 实例:

procdump -c 70 -s 5 -ma -n 3 w3wp

当体系CPU运用率延续5秒凌驾70%时,一连抓3个Full Dump。

procdump outlook -p "Processor(_Total)% Processor Time" 80

当体系CPU运用率凌驾80%,抓取Outlook历程的Mini Dump。

procdump -ma outlook -p "Process(Outlook)Handle Count" 10000

当Outlook历程Handle数凌驾10000时抓取Full Dump

procdump -ma 4572

直接天生历程号为4572的Full Dump。

 

下图是在WindgbHighCpu历程中形成High CPU时运转ProcDump敕令的运转结果,可以或许看到在CPU每次延续5秒到达5%后就会天生响应的Dump文件,共天生了3份Full Dump文件:

c. 注重:
  • ProcDump须要历程已启动,而且半途不克不及住手。好比须要抓取IIS Worker Process的High CPU Dump,由于IIS Worker Process默许会设置装备摆设Idle Timeout = 20 min,即该历程在20分钟内没有任何要求的话就会自动完毕,这类状况下ProcDump也会自动完毕。须要从新运转敕令。因而若是目的顺序存在如许的设置装备摆设,须要临时将该设置装备摆设作废。
  • 有些体系管理员愿望可以或许运转该工具后退出用户session,ProcDump是做不到的,若是有这类需求可以或许斟酌运用DebugDiag。
  • 在调试High CPU题目的时刻经常常使用到的一个敕令是!runaway,然则有些时刻!runway在ProcDump抓取Dump文件的历程当中运转不出来,报错信息以下:
0:000> !runaway ERROR: !runaway: extension exception 0x80004002. "Unable to get thread times - dumps may not have time information"

处理的要领是将Debugging Tools for Windows (WinDbg)装置目录下的dbghelp.dll拷贝到procdump.exe地点目录下,然后再运转敕令抓取Dump。 

四、WinDbg运用要领

操纵步调以下:

4.1 抓取非常顺序的Dump文件 4.2 设置标记表

标记表是WinDbg症结的“数据库”,若是没有它,WinDbg基本上就是个废料,没法剖析更多题目。以是运用WinDbg设置标记表,是必需要走的一步。

a、运转WinDbg软件,然后按【Ctrl S】弹出标记表设置窗。

b、将标记表地点:SRV*C:Symbols*http://msdl.microsoft.com/download/symbols 粘贴在输入框中,点击肯定便可。点击肯定之前,请先确认赤色字的文件夹是不是已被新建。

注:赤色字透露表现标记表当地存储途径,发起流动途径,可制止标记表反复下载。

4.3 学会翻开第一个Dump文件

       

 

当你拿到一个Dump文件后,可运用【Ctrl D】快捷键来翻开一个Dump文件,或许点击WinDbg界面上的【File=>Open Crash Dump...】按钮,来翻开一个Dump文件。第一次翻开Dump文件时,能够会收到以下提醒,涌现这个提醒时,勾选“Don't ask again in this WinDbg session”,然后点否便可。

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-

当你想翻开第二个Dump文件时,能够由于上一个剖析纪录未消灭,致使没法直接剖析下一个Dump文件,此时你可以或许运用快捷键【Shift F5】来封闭上一个对Dump文件的剖析纪录。

4.4 经由历程简朴的几个敕令学会剖析Dump文件

分享一个数据库衔接超时的Dump案例的剖析历程:

当你翻开一个Dump文件后,能够由于太多信息,让你莫衷一是,不外没紧要,我们只须要存眷几个症结信息就可以或许了。

a. 加载SOS扩大敕令

加载SOS之前,先肯定SOS的地位和版本,肯定要领以下:

若是装置了Visual Studio,那末先依照以下步调翻开VS的敕令行:

然后,在翻开的VS敕令行中输入【where sos.dll】,使取得SOS的地位和版本:

 

肯定完SOS地位和版本号后,最先加载SOS扩大敕令:

.load C:WindowsMicrosoft.NETFramework64v4.0.30319SOS.dll

以下图所示:

b. 运用!clrstack敕令来检察以后的挪用客栈信息

以下图所示:

c. 运用!dso敕令来检察客栈上的一切工具细致信息

以下图所示:

综合以上剖析可以或许勇敢地预测Common.cs 中第16行“Data Source=***;Initial Catalog=***;Persist Security Info=True;User ID=sa;Password=***”的这个数据库衔接字符串应该有题目,然后到代码中响应的处所进一步确认和修正就可以或许了。        

五、一个实在案例

分享笔者工作过的一家公司某营业体系CPU飙高90%以上的Dump剖析历程案例,步调以下:

5.1 运用ProcDump抓包 5.2 加载SOS扩大敕令
.load C:WindowsMicrosoft.NETFrameworkv2.0.50727sos.dll

5.3 剖析

实行!runaway敕令,检察线程运用CPU时候状况,以下图所示。偏重剖析前面几个线程。 

实行~22s敕令,进入到线程22,以下图所示:

实行!clrstack敕令检察以后线程客栈变量值的信息,从图中可以或许猜出大概是ExecuteNonQuery()这要领有点题目,以下图所示:

再实行!dso敕令可以或许检察客栈上的一切工具细致信息,以下图所示:

从图中看,形成CPU飙高的罪魁祸首多数由SQL Server实行

INSERT INTO [dbo].[tbl_Interface_ProcessLog] (IKey,Username,ClientIP,Module,OrderNo,LogType,Content) VALUES (@IKey,@Username,@ClientIP,@Module,@OrderNo,@LogType,@Content)

这条语句时发生非常引发,然后到源代码中找出响应的语句,经由进一步的确认、修正和从新宣布后就处理了CPU飙高的题目。

 

至此,控制几个简朴的WinDbg敕令以后,基本上绝大多数Dump人人都可以或许自力剖析了。固然WinDbg是个壮大的工具,同时发生CPU飙高和内存走漏的缘由也有许多。若是想剖析得充足正确,那末就只有多学多练,多去剖析。由于控制WinDbg剖析除须要晓得几个敕令以外,履历越发主要,末了再增补两点:

  1. WinDbg不是特地用于调试.NET顺序的工具,它更倾向于底层,可用于内核和驱动调试,特别是关于某些相称疑问的题目调试有所资助,比方内存走漏等题目。举行一般的.NET顺序调试照样运用微软专为.NET开辟所供应的调试工具更轻易一些。
  1. SOS扩大敕令中最有效的敕令是!help,运用该敕令可以或许列出一切可用的SOS扩大敕令列表,运用!help [SOSCommandName]可以或许检察每个细致扩大敕令的细致运用说明。比方!help dumpheap就可以或许检察!dumpheap这个扩大敕令的细致运用要领。多多应用!help敕令可以或许很快上手SOS。
六、Demo下载及更多材料
  • WinDbgTest下载地点:https://github.com/das2017/WinDbgTest
  • WinDbg官网:http://www.windbg.org/
  • ProcDump v9.0官网:https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx
-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。