使用Debug Diagnostic Tool排除内存泄漏故障

翻译自:https://mssqlwiki.com/2012/12/06/debugging-memory-leaks-using-debug-diagnostic-tool/

在我之前的博文中(SQL Server内存泄漏),我解释了如何使用“!heap”命令识别哪个模块泄漏了内存。有时我们使用“!d”命令来找到模型或者使用搜索内存命令(s)不能通过显示内存找到原因。

在这种情况下,我们可以使用Debug Diagnostic Tools或者UMDH来跟踪内存泄漏。这篇博文解释了如何使用Debug Diagnostics Tools来识别内存泄漏。

下载并安装Debug Diagnostic Tools从http://www.microsoft.com/en-us/download/details.aspx?id=26798

1.定位到Tools,“Options”->“Preferences”,选择“Record call stacks immediately when monitoring the leaks”。

2.定位到“rules”标签页,并选择“add rule”。

3.选择“Naive(non .Net) memory leak and handle leak”。

4.选择SQL Server或者跟踪用于内存泄漏的任何进程。

5.点击“Next”并保留默认选项(当规则是完成或失效时,你可以选择“auto-unload Leak track”)。

6.点击“Next”并现在激活规则。

7.Leaktrack.dll已经加入到用于跟踪分配的进程里。

8.现在你可以等待泄漏再次发生。

-- If you are learning how to troubleshoot SQL Server memory leak follow the steps which we followed in previous post (https://mssqlwiki.com/2012/12/04/sql-server-memory-leak/)to leak the memory.
-- Download HeapLeak.dll from this link.
-- Create  an extended stored procedure in SQL Server
sp_addextendedproc ‘HeapLeak’,‘C:\HeapLeakdll\HeapLeak.dll’
-- Let us execute this Extended SP 30 times and leak memory.
exec HeapLeak
go 30

9.当你猜测内存泄漏时,定位到“rules”,并通过右击“Leak rule”执行一个完整的用户dump。

10.在dump被捕获后,定位到高级分析标签页,添加数据文件并选择我们生成的dump。

11.定位到Tools,“Options”->“set the symbol path for analysis”。默认的Microsoft symbol path在下面。

srv*c:\Websymbols*http://msdl.microsoft.com/download/symbols;c:\Release
重要的:使用加载到SQL Server里的DLL的符号路径替代c:\Release (可选的)

12.在可用的分析脚本,选择内存压力分析器(memory analysis.asp)。

13.点击“Start Analysis”。

14.根据加载符号的时间消耗,分析可能要花费一点时间。当分析完成,会生成并打开一个HTML报告。这个HTML报告默认存储在C:\Program Files\DebugDiag\Reports\ 可以用于后续参考。

我附加了一个使用heapleak.dll内存泄漏时收集的示例报表,在这里http://sdrv.ms/TH1qfR。你可以使用它作为参考。

Debug Diagnostic Tool的内存压力分析器生成的报表有分析总结和以下表格内存。

sqlservr.exe__…………dmpVirtual Memory Analysis ReportHeap Analysis ReportLeak Analysis ReportOutstanding allocation summaryDetailed module report (Memory)Detailed module report (Handles)

15.分析总结是报表中不错部分定位哪个模块泄漏了内存。查看以下报表。

16.报表已清晰的表明HeapLeak.dll有255MB显著的分配。在heapleak.dll里“Sub”函数用于在偏移量23处分配了该内存。

17.查看虚拟内存总结。它给出了在虚拟地址孔家哪里关于内存分布的完整图片。在以下摘要里保留是1.57GB,这在32位SQL Server里是正常的,但是本地堆内存有272.94MB是不正常的。

查看堆摘要,有50个堆。

18.现在查看显著的分配总结。它给出了分配总数和分配大小的前10个模块。在以下摘要HeapLeak占用255.6MB大小里的26182。
注意:在这个报表里它是HeapLeak,但是在实践中它可能是泄漏内存的任何模块。

19.你也可以查看详细的模块报告(Memory)。它给出了内存分配,从每个模块以及函数和分配内存的源行(如果你对所有加载的模块设置符号)。

现在我们确认HeapLeak.dll里的Sub函数在行号为14位置分配了255MB,并且未释放。这个报表也给你callstack示例,显示了当函数分配内存时的代码路径。参考示例HTML报表文件http://sdrv.ms/TH1qfR。

转载于:https://blog.51cto.com/ultrasql/1791399

使用Debug Diagnostic Tool排除内存泄漏故障相关推荐

  1. UWP开发入门(十三)——用Diagnostic Tool检查内存泄漏

    因为.NET的垃圾回收机制相当完善,通常情况下我们是不需要关心内存泄漏的.问题人一但傻起来,连自己都会害怕,几个页面跳啊跳的,内存蹭蹭的往上涨,拉都拉不住.这种时候我们就需要冷静下来,泡一杯热巧克力. ...

  2. Debug Diagnostic Tool

    本文参考:http://www.cnblogs.com/hfclytze/p/3613712.html 下载地址:http://download.microsoft.com/download/B/4/ ...

  3. 调试winddows程序(windbg 和 Debug Diagnostic Tool)

    一.功能: 调试不在编译器中运行的程序.可以解决一下两种问题. 1. 程序崩溃,能找到程序报错是运行的代码行. 2. 程序涨内存,直接定位到导致内存泄漏的语句.(这个在Debug Diagnostic ...

  4. 一次完整的JVM堆外内存泄漏故障排查记录

    前言 记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助. 在整个排查过程中,我也走了不少弯路,但是在文章中我 ...

  5. UWP开发入门(十六)——常见的内存泄漏的原因

    原文:UWP开发入门(十六)--常见的内存泄漏的原因 本篇借鉴了同事翔哥的劳动成果,在巨人的肩膀上把稿子又念了一遍. 内存泄漏的概念我这里就不说了,之前<UWP开发入门(十三)--用Diagno ...

  6. SQL Server内存泄漏

    翻译自:https://mssqlwiki.com/2012/12/04/sql-server-memory-leak/ 什么是内存泄漏? 当一个进程分配了内存,它应该回收并释放给操作系统.如果由于代 ...

  7. VC使用CRT调试功能来检测内存泄漏

    信息来源:csdn      C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:"最大的长处也可能成为最大的弱点",那么 C/C++ 应用程序正好印证 ...

  8. 计算机内存的故障,电脑内存故障的表现

    电脑内存故障的表现 我们电脑经常会出现死机.蓝屏或者无法正常启动.启动后也无法进入操作系统,一般情况下我们通过替换排除法来查找故障的所在,而出现这些故障大部分是由于主板.显卡等硬件设备损坏造成,当然由 ...

  9. VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏[转]

    /C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:"最大的长处也可能成为最大的弱点",那么 C/C++ 应用程序正好印证了这句话.在 C/C++ 应用程 ...

最新文章

  1. nb-iot模块的at指令_ESP8266-学习-01 系列了解模块针脚及烧录
  2. 马云卖数据,你卖商品
  3. 深度学习算法_爱奇艺深度学习算法实习生面经
  4. Redis入门(二)安装和基本操作
  5. 使用Java 8在地图上流式传输
  6. 【渝粤题库】国家开放大学2021春1335幼儿园课程与活动设计题目
  7. rtmp/rtsp/hls公网真正可用的测试地址
  8. ionic3 html调用摄像头,ionic3懒加载中使用自定义组件component
  9. rdlc报表的制作步骤
  10. 飞机大战(源码+素材)
  11. 小众绿软|游戏:Lode Runner 2(3D挖金子,英文版)(LodeRunner2)
  12. php 获取客户端真实ip_php获取客户端真实ip地址的三种方法
  13. sony媒体服务器文件不对,索尼Z280断电MXF变成RSV文件完美修复
  14. php 前台模板,前台模板
  15. jsonp跨域原理解析
  16. 机器学习经典总结---入门必读----心血总结
  17. 真人踩过的坑,告诉你避免自动化测试常犯的10个错误
  18. bootstrap.yml与application.yml的区别
  19. 会计事务所审计、咨询等项目管理用泛微,数据关联、协作灵活
  20. Games101:作业6解析(含提高部分SAH)

热门文章

  1. 5G年终盘点:2018,意难平
  2. 卡内基梅隆大学提出基于学习的动作捕捉模型,用自监督学习实现人类3D动作追踪
  3. 万物互联的千亿级通信云市场,开发者机会在哪里
  4. 假如王撕葱是程序员......
  5. 年薪 50 万!淘宝重金招聘,35 岁以上优先,学历不限
  6. 【讲师团招募令】14场线上万人社区大会 邀你来分享
  7. “复制粘贴”发明人,竟是物理学博士转行做程序媛!
  8. 遇到这四种面试官,接了 Offer 你可能会后悔
  9. Python实现前端AES加密方式分析,***密码学必备!
  10. Android应用打开外部文件