c - Linux C 应用程序内存不足

标签 c linux out-of-memory

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

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

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

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

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

最佳答案

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

是的。

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

是的,如果 RAM 和交换空间组合 (48 GB) 足以满足该过程。

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

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

关于c - Linux C 应用程序内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33595759/

相关文章:

c - 使用 Assembly 在 C 中添加

linux - 根据 make 的类型覆盖 makefile 变量

java - HashMap 和 ArrayList 的 Android OutOfMemoryError

java - TreeMap 放置 100 个元素(每个 1MB),而堆只有 80 MB 内存,这种情况下的行为是什么?

linux - coreadm solaris 命令在 linux 中等效?

java - RStudio:.jarray(m) 中的错误:java.lang.OutOfMemoryError:Java 堆空间

c - C 程序中的浮点输出不正确

跨平台使用 fgets()?

c - LNK 2001 : Unresolve external symbol struct **

linux - 低延迟中断处理(从内核返回到用户空间的预期平均时间是?)