我正在运行 word2phrase.c使用非常大的 (45Gb) 训练集。我的 PC 有 16Gb 的物理 RAM 和 4Gb 的交换空间。我把它留在火车上过夜(第二次),早上回来,看到它被“杀死”了,没有进一步的解释。当我的 RAM 耗尽时,我坐着看着它死去。
我在我的/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?
这将由操作系统自动管理。您所要做的就是增加交换空间。
关于c - Linux C 应用程序内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33595759/