我们有一个32位的Windows服务存在内存泄漏问题,会抛出OutOfMemory异常。它是在Windows Server 2003上运行的.NET 4.0可执行文件。在使用WinDbg调试崩溃转储文件时,我发现大部分内存实际上是被保留而不是提交的。
如您从WinDbg截图中所见,有2.5GB未分类的内存使用情况,其中2.1GB实际上是保留内存(MEM_RESERVE)。我有调试转储文件的经验,但这种情况对我来说是新的。MEM_COMMIT很好-564.270MB,托管堆的大小约为82MB。
我还检查了本地堆,看是否有大块数据被保留,但也没有发现任何可疑的东西。
所以我的问题是 - MEM_RESERVED是否可能导致OOM异常?如果是这样,我该如何调试它,看看为什么/如何保留了大量内存?您还会在哪里寻找可能的问题?
如果需要其他信息,请告知我,我将更新我的帖子。
如您从WinDbg截图中所见,有2.5GB未分类的内存使用情况,其中2.1GB实际上是保留内存(MEM_RESERVE)。我有调试转储文件的经验,但这种情况对我来说是新的。MEM_COMMIT很好-564.270MB,托管堆的大小约为82MB。
我还检查了本地堆,看是否有大块数据被保留,但也没有发现任何可疑的东西。
所以我的问题是 - MEM_RESERVED是否可能导致OOM异常?如果是这样,我该如何调试它,看看为什么/如何保留了大量内存?您还会在哪里寻找可能的问题?
如果需要其他信息,请告知我,我将更新我的帖子。
!eeheap
的输出来获取有关CLR分配的一些其他信息。 - Brian Rasmussen