根据 DebugDial 的巨大预留内存(内存泄漏?)

Huge reserved memory according to DebugDial (memory leak?)

我们在生产中遇到内存问题。

在 2008 Windows 服务器上有很多网络 api 服务。我看到他们中的大多数人都有同样的问题(?),这是一个与保留内存相当大的问题。 以下是我使用 DebugDiag 获得的其他服务的信息。 该服务使用 Linq2Sql,另一个 WebApi 服务,FileSystem 仅写入 LogFile,并发送电子邮件。

.NET GC 堆信息

GC 堆大小 84.77 MB
总提交大小 153 MB

总保留大小 17254 MB

虚拟内存摘要

最大可用 VM 块的大小 7,97 TB

可用内存碎片 0,11%

可用内存 7,98 TB(总内存的 99,79%)

预留内存 17,03 GB(总内存的 0,21%)

提交的内存 384,59 MBytes(总内存的 0%)

总内存 8 TB

最大空闲块位于 0x00000005`3f380000

虚拟内存详细信息

虚拟分配 17,19 GBytes

已加载模块 179,97 MBytes

线程 17,27 MBytes

系统 4 KB

页堆 0 字节

本机堆 28,76 MBytes

虚拟分配摘要

预留内存 17 GBytes

提交的内存 185,82 MBytes

映射内存 15,5 MBytes

保留块数 94 个块

提交的块数 129 个块

映射块数 30 个块

资源监视器中我有以下信息:

已提交:257 MB

工作 394 MB

私人 198 MB

我应该忽略有关保留内存的信息还是它告诉我一些非常重要的信息?

如有任何提示,我将不胜感激。

预留内存是指进程使用的VIRTUAL MEMORY。您可以通过查看 Virtual Bytes perfmon 计数器来检查这一点。我不认为任务管理器仍然有一个显示此信息的列。如果你使用 Sysinternals 工具,如 Process Explorer 或 VMMap,你可以看到进程使用的虚拟字节,这应该接近 Debugdiag 显示的保留内存。

启动 .NET Framework 4.5(我认为),尤其是在 64 位 OS 上,CLR 保留了一大块内存(因为它是虚拟的而不是物理的)。例如4.5 asp.net 在 x64 模式下的 8 proc box 运行 上的应用程序 - 初始保留内存将高达 18GB。这完全是预料之中的,根本不是问题。