Linux C应用程序内存不足

时间:2015-11-08 15:46:44

标签: c linux out-of-memory

我使用非常大的(45Gb)训练集运行word2phrase.c。我的PC有16Gb的物理RAM和4Gb的交换。我一夜之间离开了火车(第二次tbh),我早上回来,看到它被“杀死”而没有进一步的解释。当我的RAM耗尽时,我坐着看着它死了。

我设置了/etc/sysctl.conf

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

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

  1. 用于杀死OOM的总内存(RAM + SWAP)是多少?例如,如果我将SWAP增加到32Gb,这是否会停止发生?
  2. 我是否可以强制此过程使用SWAP而不是物理RAM,但会降低性能?

2 个答案:

答案 0 :(得分:1)

问:用于杀死OOM的总内存(RAM + SWAP)是什么?

问:例如,如果我将SWAP增加到32Gb,是否会停止发生?

是的,如果RAM和交换空间合并(48 GB)就足够了。

问:我是否可以强制此过程使用SWAP而不是物理RAM,但会降低性能?

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

答案 1 :(得分:1)

回答第一个问题,是的。

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

linux指示进程如何运行,并为进程分配适当的内存。当达到阈值时,linux将使用交换空间作为度量。

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

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