【发布时间】:2014-11-20 07:11:58
【问题描述】:
tl;dr;:我的假设是否正确,这是非托管内存泄漏?
我有一个 .net 4 WPF 应用程序因内存不足异常而崩溃。在阅读内存转储时我需要一些建议:
以!address -summary开头我明白
--- Usage Summary ----- RgnCount --------Total Size -------- %ofBusy %ofTotal
unknown 1863 37b80000 ( 891.500 Mb) 71.62% 43.53%
Free 415 3233d000 ( 803.238 Mb) 39.22%
Image 1542 10327000 ( 259.152 Mb) 20.82% 12.65%
Heap 83 493e000 ( 73.242 Mb) 5.88% 3.58%
Stack 67 1480000 ( 20.500 Mb) 1.65% 1.00%
Other 12 37000 ( 220.000 kb) 0.02% 0.01%
TEB 22 16000 ( 88.000 kb) 0.01% 0.00%
PEB 1 1000 ( 4.000 kb) 0.00% 0.00%
--- Type Summary (for busy) -- RgnCount ---------- Total Size -------- %ofBusy %ofTotal
MEM_PRIVATE 900 30b7e000 ( 779.492 Mb) 62.62% 38.06%
MEM_IMAGE 2619 157c3000 ( 343.762 Mb) 27.62% 16.79%
MEM_MAPPED 71 7972000 ( 121.445 Mb) 9.76% 5.93%
--- State Summary ---------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_COMMIT 2874 43753000 ( 1.054 Gb) 86.71% 52.70%
MEM_FREE 415 3233d000 ( 803.238 Mb) 39.22%
MEM_RESERVE 716 a560000 ( 165.375 Mb) 13.29% 8.08%
--- Protect Summary (for commit) - RgnCount ---- Total Size --- %ofBusy %ofTotal
PAGE_READWRITE 1004 26c48000 ( 620.281 Mb) 49.83% 30.29%
PAGE_EXECUTE_READ 302 10f1e000 ( 271.117 Mb) 21.78% 13.24%
PAGE_READONLY 812 7044000 ( 112.266 Mb) 9.02% 5.48%
PAGE_READWRITE|PAGE_WRITECOMBINE 8 22e6000 ( 34.898 Mb) 2.80% 1.70%
PAGE_WRITECOPY 370 1ebf000 ( 30.746 Mb) 2.47% 1.50%
PAGE_EXECUTE_READWRITE 238 717000 ( 7.090 Mb) 0.57% 0.35%
PAGE_EXECUTE_WRITECOPY 96 287000 ( 2.527 Mb) 0.20% 0.12%
PAGE_READWRITE|PAGE_GUARD 44 66000 ( 408.000 kb) 0.03% 0.02%
--- Largest Region by Usage ----------- Base Address -------- Region Size ----------
unknown 2150000 186e000 ( 24.430 Mb)
Free 77ffd000 6efb000 ( 110.980 Mb)
Image 68d43000 f1e000 ( 15.117 Mb)
Heap 3c78c000 e04000 ( 14.016 Mb)
Stack 2050000 fd000 (1012.000 kb)
Other 7efb0000 23000 ( 140.000 kb)
TEB 7eefa000 1000 ( 4.000 kb)
PEB 7efde000 1000 ( 4.000 kb)
运行 !eeheap 我得到 GC 堆大小
GC Heap Size: Size: 0x1f796cdc (528051420) bytes.
我说得对吗:总进程内存是 mem_commit + mem_free + mem_reserve 总计高达 ~2 GB,而托管内存仅使用 500 GB,所以我面临本机内存泄漏?
【问题讨论】:
-
我建议您使用一些 .NET 内存分析器。他们以更友好的方式显示数据
-
您确定崩溃是由于内存不足异常造成的吗?
-
@Marc Sherman:在异常开始弹出后立即进行了转储
标签: .net wpf out-of-memory windbg