我们有一个 .NET 服务在启动时使用约 30MB 的内存。 (VM ~= 内存使用)
我想转储进程并找出占用这 30MB 的内容。
生成小型转储的 CDB 调试器内存使用量增加了 100MB。
从转储中我可以看到这 100MB 是图像内存 (DLL)
-------------------- 使用概要 ---------------------- ----
总大小 (KB) Pct(Tots) Pct(Busy) 使用情况
2d07000 (46108) : 02.20% 28.45% : 区域使用IsVAD
761ac000 (1935024) : 92.27% 00.00% : 区域使用免费
64b0000 (103104) : 04.92% 63.62% : 区域使用图像
900000 ( 9216) : 00.44% 05.69% : 区域使用堆栈
9000 ( 36) : 00.00% 00.02% : 区域使用Teb
380000 ( 3584) : 00.17% 02.21% : 区域使用堆
0 ( 0) : 00.00% 00.00% : 区域使用页面堆
1000 ( 4) : 00.00% 00.00% : 区域使用Peb
1000 ( 4) : 00.00% 00.00% : 区域使用进程参数
2000 ( 8) : 00.00% 00.00% : 区域使用环境块
总计:7fff0000 (2097088 KB) 忙碌:09e44000 (162064 KB)
在调试器分离很久之后,内存使用率仍然很高。
我想知道这个图像加载/内存增加的原因是什么?
谢谢。
We have a .NET service using ~30MB of memory at startup. (VM ~= Mem usage)
I wanted to dump the process and find out what is holding those 30MB.
The CDB debugger generating the mini-dump increased mem usage by 100MB.
From the dump I could see those 100MB were image memory (DLLs)
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
2d07000 ( 46108) : 02.20% 28.45% : RegionUsageIsVAD
761ac000 ( 1935024) : 92.27% 00.00% : RegionUsageFree
64b0000 ( 103104) : 04.92% 63.62% : RegionUsageImage
900000 ( 9216) : 00.44% 05.69% : RegionUsageStack
9000 ( 36) : 00.00% 00.02% : RegionUsageTeb
380000 ( 3584) : 00.17% 02.21% : RegionUsageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePageHeap
1000 ( 4) : 00.00% 00.00% : RegionUsagePeb
1000 ( 4) : 00.00% 00.00% : RegionUsageProcessParametrs
2000 ( 8) : 00.00% 00.00% : RegionUsageEnvironmentBlock
Tot: 7fff0000 (2097088 KB) Busy: 09e44000 (162064 KB)
The mem usage is left high, long after the debugger detached.
I want to know what is casing this image load / memory raise?
Thanks.
发布评论
评论(2)
“通常,未使用的页面不是工作集的一部分,只是地址的一部分
空间。创建完整转储时,地址空间中的所有页面
被读入并写入磁盘。只要转储的大小基本上等于进程的地址空间的大小,您所描述的就是预期的。”
我从 Ivan Brugiolo 得到了答案;帕维尔·列别丁斯基。
"Typically, unused pages are not part of the working set, just of the address
space. When you are creating a full dump, all the pages in the address space
are read-in, and written to disk. As long as the size of the dump is basically equivalent to the size of the address space of the process, what you describe is expected."
I got the answer from Ivan Brugiolo & Pavel Lebedinsky.
您可以使用分析器来分析内存消耗。
You can use a profiler to analyze the memory consumption.