我在集群上运行我的代码,我看到了一个问题,我不能在本地复制,也不知道原因。
因此,程序开始在代码中任意位置抛出OutOfMemoryException。
此外,看起来这可能与Windows本身的问题有关--其中一个异常以Assembly.Load操作的HRESULT形式出现,HRESULT为0x800705AF,解码后表示错误1455 ERROR_COMMITMENT_LIMIT (已耗尽的文件)。
这个程序实际上消耗了很小的内存,它是32位的,运行在.NET 4.0.30319下,服务器是Windows 2008,它有12核,24 program (几乎所有内存都是免费的),以及交换分区上几十of的空闲硬盘空间。
如何调试造成此错误的原因?使用什么诊断工具?
发布于 2011-03-24 13:26:20
这是64位进程在内存不足的情况下死亡的方式.小心你看的东西来诊断这件事。内存永远不会用完,它是虚拟内存空间。您必须查看一个数字,如VM大小或私有字节,任务管理器过于关注RAM。
64位进程有一个巨大的虚拟内存空间,16G甚至更高,这取决于您运行的Windows版本。要把它完全用完是不可能的,机器在你接近它之前就已经死掉了。当然,操作系统不能允许这种情况发生,因此导致了ERROR_COMMITMENT_LIMIT。实际上,64位进程受到分页文件中所保留的空间的限制。
使用像SysInternals的Process这样的工具再看一看。当您看到虚拟内存大小在没有绑定的情况下增长时,将使用内存分析器。
发布于 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。
https://stackoverflow.com/questions/5419524
复制相似问题