前面的文章中,我们提到了dump文件分为两大类:
Crash Mode Dump和Hang Mode Dump。Crash模式主要用于排查应用程序或者系统崩溃的问题,比如应用程序异常,崩溃,闪退;Windows系统蓝屏错误等。当收集用户态进程的Crash模式的内存转储文件时,dump收集工具需要附加(attach)到目标进程并监听异常。当异常发生时,dump收集工具接收到异常消息后将目标进程的内存保存到文件中。


下面我们以ProcDump为例介绍如何收集crash模式的内存转储文件。

下载工具

从微软网站下载ProcDump工具。

上传工具

如英文版本所述,您可以利用FTP将ProcDump工具上传到网站目录下,或者可以利用Kudu Console来上传。首先,使用您的Azure订阅账户登录到Kudu站点。Kudu站点的URL为https://.SCM.azurewebsites.net。在Kudu网站,点击顶部的Debug Console,然后选择一个自己喜欢的控制台:CMD或者PowerShell。在这里以Powershell为例。

在PowerShell Console上方,有一个文件浏览器。点击Site目录,进入该目录。点击文件浏览器左上方的+图标,添加一个文件夹,在本文中,将该文件夹命名为Tools。点击Tools文件夹,进入该文件夹。如下图所示,将下载的ProcDump拖拽到文件浏览器,ProcDump将被上传并自动解压缩。
kudu drag-drop

生成内存转储文件

收集Crash模式的内存转储文件时,我们需要事先运行dump收集工具。当问题重现的时候,Dump收集工具会自动生成内存转储文件。

首先,登录到Kudu网站,选择Process Explorer。如下图所示,记录下w3wp.exe的进程ID。注意,标有SCM标志的进程是Kudu网站进程。
kudu process explorer

点击Debug Consle,然后选择CMD,进入命令行控制台,然后进入tools目录。运行ProcDump命令监视异常信息。在本例中,对应的命令行为“.\procdump -accepteula -ma -e 1 540”
-accepteula告诉ProcDump不要弹出版权信息的对话框。因为在Kudu PowerShell Console中,无法看到任何UI窗口。
-ma告诉ProcDump生成完整的内存转储文件。
540为w3wp.exe的进程ID。
-e 1表示监听first chance的异常和未处理异常。

如下图所示,当有异常发生时,在当前目录下生成一个.dmp文件。可以将该文件下载到本地进行分析。关于如何分析Dump文件,请访问www.debugging.com.cn
procdump-exception dump

注意事项:
1. 从Kudu控制台运行的命令有超时设置(默认为10分钟),如果问题不能及时重现,Kudu控制台会kill掉ProcDump命令,如果问题在此之前没有重现,那么需要再次重复上面的步骤再次抓取dump文件。该设置可以通过SCM_COMMAND_IDLE_TIMEOUT应用设置来调整。关于如何配置应用设置,请参考Stefan的文章
2. 如果网站20分钟内没有请求,w3wp.exe会被shutdown以释放系统资源,此时ProcDump命令也会被终止。如果问题在此之前没有重现,那么需要再次重复上面的步骤再次抓取dump文件。建议使用always-on功能避免该类问题。

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注