首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统中具有大量空闲内存的OutOfMemoryException / ERROR_COMMITMENT_LIMIT

系统中具有大量空闲内存的OutOfMemoryException / ERROR_COMMITMENT_LIMIT
EN

Stack Overflow用户
提问于 2011-03-24 12:58:04
回答 2查看 3.1K关注 0票数 1

我在集群上运行我的代码,我看到了一个问题,我不能在本地复制,也不知道原因。

因此,程序开始在代码中任意位置抛出OutOfMemoryException。

此外,看起来这可能与Windows本身的问题有关--其中一个异常以Assembly.Load操作的HRESULT形式出现,HRESULT为0x800705AF,解码后表示错误1455 ERROR_COMMITMENT_LIMIT (已耗尽的文件)

这个程序实际上消耗了很小的内存,它是32位的,运行在.NET 4.0.30319下,服务器是Windows 2008,它有12核,24 program (几乎所有内存都是免费的),以及交换分区上几十of的空闲硬盘空间。

如何调试造成此错误的原因?使用什么诊断工具?

EN

回答 2

Stack Overflow用户

发布于 2011-03-24 13:26:20

这是64位进程在内存不足的情况下死亡的方式.小心你看的东西来诊断这件事。内存永远不会用完,它是虚拟内存空间。您必须查看一个数字,如VM大小或私有字节,任务管理器过于关注RAM。

64位进程有一个巨大的虚拟内存空间,16G甚至更高,这取决于您运行的Windows版本。要把它完全用完是不可能的,机器在你接近它之前就已经死掉了。当然,操作系统不能允许这种情况发生,因此导致了ERROR_COMMITMENT_LIMIT。实际上,64位进程受到分页文件中所保留的空间的限制。

使用像SysInternals的Process这样的工具再看一看。当您看到虚拟内存大小在没有绑定的情况下增长时,将使用内存分析器。

票数 1
EN

Stack Overflow用户

发布于 2011-04-07 07:15:33

首先检查您的应用程序是在32位还是64位模式下运行,在任务管理器中查看您的应用程序是否有*32,最后它意味着它在32位以下运行。32位应用程序只有2GB的虚拟地址空间用于您的应用程序。当OS无法找到足够的连续地址来满足应用程序内存请求时,就会发生OOM。因此,为了确定这个问题,我建议阅读http://www.codeproject.com/Articles/176031/Out-of-Memory-Exception-A-simple-string-Split-can-.aspx一篇文章。如果上面的文章不能解决您的问题,那么您可以参考http://blogs.msdn.com/b/tess/archive/2008/02/04/net-debugging-demos-information-and-setup-instructions.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5419524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档