我使用非常大的(45Gb)训练集运行word2phrase.c。我的PC有16Gb的物理RAM和4Gb的交换。我一夜之间离开了火车(第二次tbh),我早上回来,看到它被“杀死”而没有进一步的解释。当我的RAM耗尽时,我坐着看着它死了。
我设置了/etc/sysctl.conf
vm.oom-kill = 0
vm.overcommit_memory = 2
实际的源代码似乎没有将数据写入文件,而是将其保存在内存中,这就产生了问题。
答案 0 :(得分:1)
问:用于杀死OOM的总内存(RAM + SWAP)是什么?
是
问:例如,如果我将SWAP增加到32Gb,是否会停止发生?
是的,如果RAM和交换空间合并(48 GB)就足够了。
问:我是否可以强制此过程使用SWAP而不是物理RAM,但会降低性能?
这将由操作系统自动管理。您所要做的就是增加交换空间。
答案 1 :(得分:1)
回答第一个问题,是的。
第二个问题: 我可以强制此过程使用SWAP而不是物理RAM
linux指示进程如何运行,并为进程分配适当的内存。当达到阈值时,linux将使用交换空间作为度量。
在这种情况下,增加交换空间可能会起作用。然后,再一次,我不知道linux将如何应对如此大的交换,请记住,这可能会大大降低性能。
最好的替代方法是将45GB训练集分成较小的块。