Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net OutOfMemoryException/ERROR\u Commission\u限制系统中有大量可用内存_.net_Windows_Out Of Memory_Swap - Fatal编程技术网

.net OutOfMemoryException/ERROR\u Commission\u限制系统中有大量可用内存

.net OutOfMemoryException/ERROR\u Commission\u限制系统中有大量可用内存,.net,windows,out-of-memory,swap,.net,Windows,Out Of Memory,Swap,我在集群上运行我的代码,我发现了一个无法在本地复制的问题,并且看不到其原因 因此,程序开始在代码的任意位置错误地抛出OfMemoryException 此外,看起来这可能与Windows本身发生故障有关-其中一个异常表现为Assembly.Load操作的HRESULT,HRESULT为0x800705AF,解码时表示错误1455错误承诺限制(交换文件耗尽) 该程序实际上消耗了非常少的内存,它是32位的,在.NET 4.0.30319下运行,服务器是Windows server 2008,在交换分

我在集群上运行我的代码,我发现了一个无法在本地复制的问题,并且看不到其原因

因此,程序开始在代码的任意位置错误地抛出OfMemoryException

此外,看起来这可能与Windows本身发生故障有关-其中一个异常表现为Assembly.Load操作的HRESULT,HRESULT为0x800705AF,解码时表示错误1455错误承诺限制(交换文件耗尽)

该程序实际上消耗了非常少的内存,它是32位的,在.NET 4.0.30319下运行,服务器是Windows server 2008,在交换分区上有12个内核、24Gb RAM(几乎所有可用内存)和几十GB的可用硬盘空间

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

这是64位进程在内存不足情况下死亡的方式。在诊断这一点时,请注意您所看到的内容。您永远不会耗尽RAM,它是虚拟内存空间。您必须查看VM大小或专用字节之类的数字,TaskManager过于关注RAM

一个64位进程有一个巨大的虚拟内存空间,16 GB及以上,这取决于您运行的Windows版本。这是不可能完全用尽它,机器死了一个交换死亡之前,你可以接近。这当然是操作系统不允许发生的,因此错误是有限的。实际上,64位进程受其在分页文件中可以保留的空间量的限制


使用SysInternals的Process Explorer之类的工具进行另一种查看。当您看到虚拟内存大小不受限制地增长时,可以使用内存探查器。

首先检查您的应用程序是否在32位或64位模式下运行,然后在taskmanager中查看您的应用程序是否具有*32位,最后这意味着它在32位模式下运行。32位应用程序只有2GB的虚拟地址空间供您的应用程序使用。当操作系统找不到足够的连续地址来满足您的应用程序内存请求时,就会发生OOM。因此,为了确定问题所在,我建议阅读这篇文章。如果上面的文章不能解决您的问题,那么您可以参考。

您的交换文件是固定大小还是自动的?如果您是32位的,您的进程地址空间限制为2(有时为3)GB。不管服务器的实际内存有多大——如果分配给你2GB的地址空间,你实际上就没有内存了。@Damien——我知道——但程序实际消耗的内存不到100 MB。