为什么转储 .NET 进程会增加内存使用量

发布于 2024-08-20 19:31:11 字数 887 浏览 4 评论 0 原文

我们有一个 .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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

内心激荡 2024-08-27 19:31:11

“通常,未使用的页面不是工作集的一部分,只是地址的一部分
空间。创建完整转储时,地址空间中的所有页面
被读入并写入磁盘。只要转储的大小基本上等于进程的地址空间的大小,您所描述的就是预期的。”

我从 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.

谁人与我共长歌 2024-08-27 19:31:11

您可以使用分析器来分析内存消耗。

  1. NProfiler - foss
  2. NCover - 不是免费的

You can use a profiler to analyze the memory consumption.

  1. NProfiler - foss
  2. NCover - not free
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文