Linux C应用程序内存不足

Linux C应用程序内存不足,c,linux,out-of-memory,C,Linux,Out Of Memory,我使用一个非常大(45Gb)的训练集运行。我的电脑有16Gb的物理RAM和4Gb的交换空间。我在火车上过夜(第二次tbh),第二天早上回来,看到它被“杀死”,没有进一步解释。我坐着看着它死去,我的公羊跑了 我在我的/etc/sysctl.conf vm.oom-kill = 0 vm.overcommit_memory = 2 实际的源代码似乎并没有将数据写入文件,而是将其保存在内存中,这造成了问题 总内存(RAM+交换)是否用于杀死OOM?例如,如果我将交换空间增加到32Gb,这种情况会停止

我使用一个非常大(45Gb)的训练集运行。我的电脑有16Gb的物理RAM和4Gb的交换空间。我在火车上过夜(第二次tbh),第二天早上回来,看到它被“杀死”,没有进一步解释。我坐着看着它死去,我的公羊跑了

我在我的
/etc/sysctl.conf

vm.oom-kill = 0
vm.overcommit_memory = 2
实际的源代码似乎并没有将数据写入文件,而是将其保存在内存中,这造成了问题

  • 总内存(RAM+交换)是否用于杀死OOM?例如,如果我将交换空间增加到32Gb,这种情况会停止吗
  • 我是否可以强制此进程使用交换而不是物理RAM,以降低性能为代价

  • Q:用于杀死OOM的总内存(RAM+交换)是多少?

    Q:例如,如果我将交换空间增加到32Gb,这种情况会停止吗?

    是的,如果RAM和交换空间的组合(48 GB)足以支持该进程

    Q:我是否可以强制此进程使用交换而不是物理RAM,以降低性能为代价?


    这将由操作系统自动管理。您所要做的就是增加交换空间。

    要回答第一个问题,是的

    第二个问题: 我可以强制此进程使用交换而不是物理RAM吗

    linux指定进程的运行方式,并为进程适当分配内存。当达到阈值时,linux将使用交换空间作为衡量标准

    在这种情况下,增加交换空间可能有效。另外,我不知道linux将如何应对如此大的交换,请记住,这可能会显著降低性能


    最好的替代方法是将45GB的训练集分割成更小的块。

    如果100%的准确性不重要,那么你不能将训练集分割成10个块并手动编译结果吗?@GradyPlayer如果增加交换不能解决这个问题,我可能不得不这样做。不幸的是,这需要我进行在线培训,这可能是不可能的(我不知道网络模型到底是如何工作的)。@Alex-如果不断分配和释放内存,就会出现潜在问题。虚拟页面最终会出现无法使用的间隙。Microsoft的.net framework等环境偶尔会暂停进程并重新打包内存页以避免此问题。我不知道Linux的等价物是什么,这可能不是word2phrase内存不足的原因。