Azure网站:如何收集内存转储文件(memory dump file)
Azure网站:如何收集内存转储文件(memory dump file)
关于更多内存转储文件收集、分析的内容,请访问www.debugging.com.cn。
内存转储文件,顾名思义,就是将内存中的数据转储保存在转储文件中(通常为.dmp文件),技术人员可以通过分析该文件查找软件错误的原因。收集内存转储文件时,通常需要登录到问题机器运行特定的工具。下面的文档列出了几个常用工具。
Choosing the Best Tool
http://msdn.microsoft.com/en-us/library/windows/hardware/ff539117(v=vs.85).aspx
内存转储文件是一个比较冷门的概念,即使一些资深的技术人员也可能对此很生疏。在开始之前,我们介绍一下内存转储文件的基本概念。内存转储文件相当于一个内存的snapshot,在特定问题发生的时候对进程或者整个系统的内存状态进行一次“照相”,将当前的内存状态保持到文件中。这个文件就称为内存转储文件,通常是.dmp文件。内存转储文件包含进程或者系统的瞬时状态,比如当前正在执行的函数、CPU指令等,以及内存、句柄、CPU等资源的使用情况等等。
根据错误类型,内存转储文件可以分为两类:
- Crash Dump
主要用于排查应用程序或者系统崩溃的问题,比如应用程序异常终止,闪退;Windows系统蓝屏错误等。当收集用户态进程的Crash模式的内存转储文件时,收集工具的工作原理如下:
- 附加(attach)到目标进程
- 监听应用异常,比如AV(Access Violation/访问违例/非法访问 不是Adult Vedio)
- 当指定的异常发生后,将目标进程的内存保存到文件中
- 根据指定的选项终止目标进程或者允许目标进程继续运行
- Hang Dump
主要用于排查应用程序或者Windows性能问题。比如系统运行缓慢,应用性能变差,资源(CPU/内存)使用率上升、资源泄露等等。当收集Hang模式的内存转储文件时,收集工具的工作原理如下:
- 附加(attach)到目标进程
- 挂起(suspend)所有的线程
- 将目标进程的内存保存到文件中
- 恢复(resume)线程的运行
- 收集程序脱离目标进程
根据转储的对象,可以分为两类:
- Kernel Mode Dump
用于排查Windows系统问题,通常Kernel内存转储文件中包含整个系统内存的镜像。
- User Mode Dump
用于排查应用程序问题,通常包含应用程序对应的进程使用的内存的镜像。
根据转储文件包含的信息,可以分为两类:
- Full Memory Dump
Full Memory Dump将应用程序或者完整的系统的内存保存到转储文件中。该文件通常较大。文件大小与应用或者系统使用的内存一致。
- Mini Memory Dump
Mini memory Dump可以只包含指定的信息,比如只包含线程信息等等。具体选项可以参考下面的文档。
Minu Dumps
http://msdn.microsoft.com/en-us/library/windows/hardware/ff552212(v=vs.85).aspx
在Azure网站中,用户无法登陆到运行网站的虚拟机,因此也无法直接运行收集内存转储文件的工具。本系列将介绍如何在Azure网站中收集内存转储文件,包括:
- 如何收集Hang模式的内存转储文件
- 如何收集Crash模式的内存转储文件
- 如何自动收集内存转储文件
- 利用DaaS收集并自动分析内存转储文件