首先,什么是Out Of Memory?就是内存溢出,简称OOM(下边我就用这个简称了啊!)。说白了,就是程序想用内存的时候,OS没有那么多内存可以分配了,然后就抱OOM错误了。
首先介绍一下我这个项目的情况,基于exchange 2007+sp1+hmc+web service call,通过一个winform的模拟测试程序,单线程添加信息:循环25万次,每循环一次创建一个公司,开通邮件域名,并创建5个帐号,每个帐号都开通邮件服务。现在循环到100次左右的时候,w3wp.exe的内存占用为private bytes:100M,virtual bytes:300M.听兄弟讲,他们做过类似的测试,当循环到400-500个的时候,会出现OOM的问题。
既然是OOM,我们当然要介绍一个超级cool的工具:debugdiag!(这个工具以后再介绍,因为要贴N多图,实在痛苦……)通过debugdiag抓memory leak的dump(239M),发现有如下问题:mscorwks泄漏了35M左右的内存。
现在转到windbg中来,我们首先看命令!eeheap,它一共有两个参数:
0:000> !help eeheap
-------------------------------------------------------------------------------
!EEHeap [-gc] [-loader]
首先看一下-gc的参数,!eeheap -gc.这个命令表明,我们程序占用托管堆的大小:
0:000> !eeheap -gc
Number of GC Heaps: 1
generation 0 starts at 0x01ff3f30
generation 1 starts at 0x01f5df5c
generation 2 starts at 0x019c1000
ephemeral segment allocation context: (0x020bcbf8, 0x020bd46c)
segment begin allocated size
000ead50 7a72c43c 7a74d318 0x00020edc(134876)
000e62a0 790d55a0 790f4b50 0x0001f5b0(128432)
019c0000 019c1000 020bd46c 0x006fc46c(7324780)
Large object heap starts at 0x029c1000
segment begin allocated size
029c0000 029c1000 02cfbbd8 0x0033abd8(3386328)
Total Size 0xa774d0(10974416)
------------------------------
GC Heap Size 0xa774d0(10974416)
dump大小为239M,托管堆大小为11M不到,差别很大的!剩下的内存在哪里?现在来看一个新的命令,!address,运行后,会有一坨又一坨的输出,我们关心的是后面的summary,如下:
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
89b8000 ( 141024) : 06.72% 43.69% : RegionUsageIsVAD
6c4b4000 ( 1774288) : 84.61% 00.00% : RegionUsageFree
61d4000 ( 100176) : 04.78% 31.03% : RegionUsageImage
7fc000 ( 8176) : 00.39% 02.53% : RegionUsageStack
20000 ( 128) : 00.01% 00.04% : RegionUsageTeb
4791000 ( 73284) : 03.49% 22.70% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
1000 ( 4) : 00.00% 00.00% : RegionUsagePeb
1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs
1000 ( 4) : 00.00% 00.00% : RegionUsageEnvironmentBlock
Tot: 7fff0000 (2097088 KB) Busy: 13b3c000 (322800 KB)
-------------------- Type SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
6c4b4000 ( 1774288) : 84.61% : <free>
66c3000 ( 105228) : 05.02% : MEM_IMAGE
30a8000 ( 49824) : 02.38% : MEM_MAPPED
a3d1000 ( 167748) : 08.00% : MEM_PRIVATE
-------------------- State SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Usage
ee99000 ( 244324) : 11.65% : MEM_COMMIT
6c4b4000 ( 1774288) : 84.61% : MEM_FREE
4ca3000 ( 78476) : 03.74% : MEM_RESERVE
正文:http://www.qqread.com/aspdotnet/b393673.html进入讨论组讨论。相关专题
- .NET开发人员犯的6大安全错误 (6次浏览)
- 请跟我来--使用Ext搞个原型 (1次浏览)
- ASP.NET 3.5 Extensions带来什么 (1次浏览)
- 应用WEB标准会使ScrollTop属性失效! (0次浏览)
- Cache用法之缓存页面和缓存数据 (0次浏览)
- 支持正则表达式的UrlMapping (0次浏览)
- 关于ASP.NET 2.0的目录结构变化 (0次浏览)
- WPF中Closing窗体时调用Hide()方法异常 (0次浏览)
- 对象数组根据某属性列的灵活排序 (0次浏览)
- DB2 9和ASP.NET 2.0构建下一代应用程序 (0次浏览)



