WinDbg的学习路径,艰难曲折,多次研究进展不多,今日有所进展,记录下来。

微软官方帮助文档非常全面:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff551063(v=vs.85).aspx

问题发现在服务器上,服务器为WinServer2012 R2 x64。其中一个Windows服务,内存高达7G。但此服务,无什么操作,仅仅定时获取数据,更新数据。使用的EntityFramework。用任务管理器,抓包下来,查看。Dump包有7GB之大。

1、准备环境,加载sos.dll===========================

开始调试,首先WinDbg,分为x64和x86版本。由于Dump运行环境,为64位,故WinDbg也应64位,这就要主机调试环境也应64位。我主机环境为win8.1x64。

运行WinDbg,一定要管理员权限。

然后,确认是否已加载sos.dll。使用.chain命令,查看。若未加载,则加载64位的sos.dll。因为Dump是x64位的,故加载x32位不成,会提示

"The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll) failed, Win32 error 0n193

"%1 不是有效的 Win32 应用程序。""

sos.dll微软官方帮助文档,https://msdn.microsoft.com/en-us/library/bb190764(v=vs.110).aspx

2、调试===================================

1)、.cls清屏。
2)、!eeheap -gc 查看托管堆,发现2代堆非常大,近2.5G。故确定问题在此。

每个Segment最大255M,begin为起始地址,allocated为结束地址,结束地址减去起始地址等于size,括号里为10进制大小。LOB并不大。

3)、由于dump很大,全分析很慢,故只取一个二代堆的Segment分析。!DumpHeap 000000008f591000
 000000009f58ffe0

4)、分析几分钟后,stat统计节显示String类型最大。故再次分析String类型。!DumpHeap -type String
 000000008f591000  000000009f58ffe0

5)、发现String类型,有很多4KB字符串,不知什么。进一步分析大字符串,!DumpHeap
-type String -min 1000  000000008f591000  000000009f58ffe0

6)、!do 查看对象,发现String是错误信息。联系之前,此系统确实一直出现报错行为,但不影响使用也就没管。

7)、!gcroot
-all 查看引用 ,此操作也比较慢。发现String是一个对象属性,而对象是EF5的Context表记录。

8)、重复6)、7)步骤,发现都是如此。那么这个Context一直有效,其中内容也就一直被引用。

8)、这时,用IL查看代码,发现确实有个静态的EF的ObjectContext被引用,此对象生命期与进程一致。由于长期运行,加入数据,ObjectContext会一直增加。

关于这个问题,我找了下EF相关文档,似乎没有清理DBContext的命令。

其实,这种操作非常常见,为此,我单独做了测试程序,证明了以上结论。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication12
{
class Program
{ static IT_MonitorEntities DB = new IT_MonitorEntities(); static void Main(string[] args)
{
while (true)
{
Console.WriteLine("是否调用Add Y/N");
ConsoleKeyInfo k = Console.ReadKey();
Console.WriteLine("");
if (k.Key == ConsoleKey.Y)
{
Console.WriteLine("Add ");
Add();
}
} } static void Add()
{
for (int i = 0; i < 1000; i++)
{
DB.JobNotifies.Add(new JobNotify()
{
Remark = i.ToString() + " " + invarStr
});
DB.SaveChanges();
}
} static string invarStr = @"你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒
你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒你巍峨阿斯顿发地方阿斯顿发啊上帝发誓地方撒"; }
}

  

3、帮助信息================

1)、WinDbg可使用!help cmd.获取帮助,比如!help dumpheap

2)、可用搜索内存s -u 0x017a1000 0x017c8c78 "朝生暮死"

或搜索内存到底 .foreach (addr { s -[1]u 0x017a1000 0x017c8c78 "朝生暮死"}){du ${addr}}

3)、

WinDbg调试高内存的.Net进程Dump的更多相关文章

  1. Windbg分析高内存占用问题

    1. 问题简介 最近产品发布大版本补丁更新,一商超客户升级后,反馈系统经常奔溃,导致超市的收银系统无法正常收银,现场排队付款的顾客更是抱怨声声.为了缓解现场的情况, 客户都是手动回收IIS应用程序池才 ...

  2. 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏

    Windbg的一些简单使用命令 一.崩溃 1.  输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2.  查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame  0,切到第0 ...

  3. (转)解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题

    解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题   开发人员提交一个dump文件(Windows Server 2008 R2),当前调试环境Windows Serve ...

  4. Linux OOM-killer 内存不足时kill高内存进程的策略

    OOM_killer是Linux自我保护的方式,当内存不足时不至于出现太严重问题,有点壮士断腕的意味 在kernel 2.6,内存不足将唤醒oom_killer,挑出/proc/<pid> ...

  5. windbg调试C#代码(一)

    用windbg调试C#代码是比较麻烦的,因为windbg是针对OS层级的,而C#被CLR隔了一层,很多原生的命令如查看局部变量dv.查看变量类型dt等在CLR的环境中都不能用了.必须使用针对CLR的扩 ...

  6. windbg调试.net程序

    1. 解决线上.NET应用程序的如下问题: 崩溃 CPU高 程序异常 程序Hang死 2. 安装WinDbg: http://msdn.microsoft.com/en-us/windows/hard ...

  7. WinDbg调试命令汇总

    一. 1. !address eax 查看对应内存页的属性 2. vertarget 显示当前进程的大致信息 3 !peb 显示process Environment Block 4. lmvm 可以 ...

  8. 使用Windbg调试.Net应用程序 [转]

    Windbg+Procdump解决w3wp.exe CPU过百问题[转] High CPU Dump收集工具 - ProcDump使用方法[转] ProcDump v9.0[官方] windbg查找c ...

  9. WinDBG 调试命令大全

    转载收藏于:http://www.cnblogs.com/kekec/archive/2012/12/02/2798020.html  #调试命令窗口 ++++++++++++++++++++++++ ...

随机推荐

  1. ORACLE的impdp和expdp命令【登录、创建用户、授权、导入导出】

    使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...

  2. bigdata related

    hive: http://lxw1234.com/archives/2015/07/413.htm 搜狗实验室数据集: https://www.sogou.com/labs/resource/list ...

  3. JFinal2.0极速开发视频教程发布【转】

    原文:http://blog.dreamlu.net/blog/79 目前JFinal越来越火爆,而且使用的公司越来越多.鉴于市面上JFinal的学习资源不多,我们开始基于JFinal2.0录制学习视 ...

  4. Codeforces Round #511 (Div. 2) C. Enlarge GCD

    题目链接 题目就是找每个数的最小素因子,然后递归除,本来没啥问题,结果今天又学习了个新坑点. 我交了题后,疯狂CE,我以为爆内存,结果是,我对全局数组赋值, 如果直接赋值,会直接在exe内产生内存,否 ...

  5. noip 2013 luogu P1969 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  6. Codeforces 451 E Devu and Flowers

    Discription Devu wants to decorate his garden with flowers. He has purchased n boxes, where the i-th ...

  7. iOS中创建自定义的圆角按钮

    iOS中很多时候都需要用到指定风格的圆角按钮,尽管UIButton提供了一个方式创建圆角按钮: + (id)buttonWithType:(UIButtonType)buttonType;//指定bu ...

  8. HDU2897( 巴什博奕变形)

    邂逅明下 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  9. [iOS]APP代码实践:建立一个辅助的APP类,降低对AppDelegate的改动

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. [UIApplication sharedApplication].delegate 可是时间长了还是认为这样不太好,AppDelegate本身有其自己 ...

  10. 优化你的服务器Apache、MySQL、PHP

    硬件上的考虑其实起50%的作用,当然是越快越好.如果不知道哪个快,就换成越贵越好.可实际上不可能做到这些,因为银子有限,所以按照这个顺序考虑:内存越大越好->硬盘SCSI好于SATA->C ...