gpt4 book ai didi

.net - 保留内存是否会导致内存不足异常

转载 作者:IT王子 更新时间:2023-10-28 23:35:41 25 4
gpt4 key购买 nike

我们有一个 32 位 Windows 服务会泄漏内存 - 引发 OutOfMemory 异常。它是在 windows server 2003 上运行的 .net 4.0 可执行文件。在使用 WinDbg 调试故障转储文件时,我看到大部分内存实际上是保留的,没有提交。 enter image description here

从 WinDbg 屏幕截图中可以看出,有 2.5 Gb 的未分类内存使用量,其中大部分 2.1 Gb 实际上是保留内存 (MEM_RESERVE)。我有调试粉碎转储的经验,但这种情况对我来说是新事物。 MEM_COMMIT 退出 OK - 564.270 Mb,托管堆大小约为 82 Mb

enter image description here

我还检查了 native 堆,看看是否有大块数据保留,但也找不到任何可疑的东西

enter image description here

所以我的问题是 - MEM_RESERVED 是否可能导致 OOM 异常?如果是这样,我该如何调试它,看看为什么/有多少内存被保留?您还会在哪里寻找可能存在的问题?

如果需要任何其他信息,请询问,我会更新我的帖子。

最佳答案

是的,预留内存会触发OutOfMemoryException。尝试分配几个非常大的字节数组。在您写入数组的内容之前,不会提交这些内存。但是,只需分配这些数组,您就可以轻松触发 OOM。

我不知道实现细节,但由于 VirtualAlloc 如果不能满足保留请求就会失败,我假设 CLR 将其转换为异常。我看不出它如何将失败的保留请求变成有用的东西,所以异常(exception)是一个明智的选择。

关于.net - 保留内存是否会导致内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23228459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com