我正在使用一个非常大的(45Gb)训练集运行word2phrase.c。我的电脑有16Gb的物理RAM和4Gb的交换空间。我把它放在火车上过夜(第二次待定),第二天早上回来,看到它被"杀死"了,没有进一步的解释。当我的内存用完时,我坐着看着它死去。
我在/etc/sysctl.conf
中设置
vm.oom-kill = 0
vm.overcommit_memory = 2
实际的源代码似乎并没有将数据写入文件,而是将其保存在内存中,这就造成了问题。
- 总内存(RAM+SWAP)是否用于消除OOM?例如,如果我将SWAP增加到32Gb,这种情况会停止吗
- 我可以以降低性能为代价,强制此进程使用SWAP而不是物理RAM吗
Q:总内存(RAM+SWAP)是用来杀死OOM的吗
是的。
问:例如,如果我将SWAP增加到32Gb,这种情况会停止吗
是的,如果RAM和交换空间加在一起(48 GB)就足够处理了。
问:我能以降低性能为代价,强制此进程使用SWAP而不是物理RAM吗
这将由操作系统自动管理。您所要做的就是增加交换空间。
要回答第一个问题,可以。
第二个问题:我可以强制此进程使用SWAP而不是物理RAM吗
linux规定了进程的运行方式,并为进程适当地分配内存。当达到阈值时,linux将使用交换空间作为度量。
在这种情况下,增加交换空间可能会起作用。再说一遍,我不知道linux将如何应对如此大的交换,请记住,这可能会大大降低性能。
最好的替代方法是将45GB的训练集分成更小的部分。