Linux C 应用内存不足

Linux C app runs out of memory

我正在 运行使用非常大的 (45Gb) 训练集 word2phrase.c。我的 PC 有 16Gb 的物理 RAM 和 4Gb 的交换空间。我把它留在火车上过夜(第二次),早上回来,看到它是 "killed",没有进一步的解释。当我的 RAM 运行 耗尽时,我坐着看着它死去。

我设置在我的/etc/sysctl.conf

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

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

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

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

是的。

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

是的,如果 RAM 和交换 space 组合 (48 GB) 足以完成该过程。

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

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

回答第一个问题,是的。

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

linux 指示进程如何 运行,并为进程适当分配内存。当达到阈值时,linux 将使用交换 space 作为衡量标准。

增加交换 space 在这种情况下可能有效。然后,我不知道 linux 将如何处理如此大的交换,请记住,这可能会显着降低性能。

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