【发布时间】:2011-01-31 15:03:05
【问题描述】:
这个问题和我的previous question有关。
故事情节:我有一个消耗大量内存的 .NET 应用程序 如果您查看任务管理器 VMSize。我正在尝试找出消耗这么多内存的原因。
好的,现在我正在查看 .net 性能计数器
alt text http://s006.radikal.ru/i213/1003/30/dd42433cd12d.jpg
提交和保留字节加起来只有1.2 GB
现在让我们看看windb sos 调试。 让我们运行 eeheap -gc 命令
alt text http://s001.radikal.ru/i194/1003/e8/9da33856ed58.jpg
GC 使用的堆大小只有 340 MB。剩余的已用内存在哪里? 我需要了解为什么 TaskManager 中的 WM 大小为 2.4 GB
更新
--------------------------------------
Total LoaderHeap size: 0x74c000(7651328)bytes
=======================================
Number of GC Heaps: 1
generation 0 starts at 0x0000000081b89d00
generation 1 starts at 0x0000000081a83b20
generation 2 starts at 0x0000000001281000
ephemeral segment allocation context: none
segment begin allocated size
0000000001280000 0000000001281000 00000000057416a0 0x00000000044c06a0(72091296)
000000004ad00000 000000004ad01000 00000000513c1cc8 0x00000000066c0cc8(107744456)
000000007fff0000 000000007fff1000 000000008994e310 0x000000000995d310(160813840)
Large object heap starts at 0x0000000011281000
segment begin allocated size
0000000011280000 0000000011281000 00000000112c67d0 0x00000000000457d0(284624)
Total Size 0x14523e48(340934216)
------------------------------
GC Heap Size 0x14523e48(340934216)
【问题讨论】:
-
您是否加载了任何可能泄漏的本机代码?您可以使用
lm命令查看加载的模块。 -
你能用 !eeheap(无参数)的输出而不是加载器堆来更新帖子吗?
-
你能发布一个 VMMap (technet.microsoft.com/en-us/sysinternals/dd535533.aspx) 转储吗?
-
!vmstat 会给你类似的信息
-
好的,问题解决了。堆栈大小正在增长,因为计时器创建的线程正在等待 lock 语句
标签: .net memory-leaks out-of-memory taskmanager