Linux C应用程序内存不足



我正在使用一个非常大的(45Gb)训练集运行word2phrase.c。我的电脑有16Gb的物理RAM和4Gb的交换空间。我把它放在火车上过夜(第二次待定),第二天早上回来,看到它被"杀死"了,没有进一步的解释。当我的内存用完时,我坐着看着它死去。

我在/etc/sysctl.conf 中设置

vm.oom-kill = 0
vm.overcommit_memory = 2

实际的源代码似乎并没有将数据写入文件,而是将其保存在内存中,这就造成了问题。

  1. 总内存(RAM+SWAP)是否用于消除OOM?例如,如果我将SWAP增加到32Gb,这种情况会停止吗
  2. 我可以以降低性能为代价,强制此进程使用SWAP而不是物理RAM吗

Q:总内存(RAM+SWAP)是用来杀死OOM的吗

是的。

问:例如,如果我将SWAP增加到32Gb,这种情况会停止吗

是的,如果RAM和交换空间加在一起(48 GB)就足够处理了。

问:我能以降低性能为代价,强制此进程使用SWAP而不是物理RAM吗

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

要回答第一个问题,可以。

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

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

在这种情况下,增加交换空间可能会起作用。再说一遍,我不知道linux将如何应对如此大的交换,请记住,这可能会大大降低性能。

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

最新更新