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
实际的源代码似乎没有将数据写入文件,而是将其保存在内存中,这就是问题所在。
- 总内存(RAM+SWAP)是用来杀OOM的吗?例如,如果我将 SWAP 增加到 32Gb,这种情况会停止吗?
- 我能否以降低性能为代价强制此进程使用 SWAP 而不是物理 RAM?
问:总内存(RAM+SWAP)是用来杀OOM的吗?
是的。
问:例如,如果我将 SWAP 增加到 32Gb,这种情况会停止吗?
是的,如果 RAM 和交换 space 组合 (48 GB) 足以完成该过程。
问:我能否以降低性能为代价强制此进程使用 SWAP 而不是物理 RAM?
这将由操作系统自动管理。您所要做的就是增加交换 space.
回答第一个问题,是的。
第二个问题:
我可以强制此进程使用 SWAP 而不是物理 RAM
linux 指示进程如何 运行,并为进程适当分配内存。当达到阈值时,linux 将使用交换 space 作为衡量标准。
增加交换 space 在这种情况下可能有效。然后,我不知道 linux 将如何处理如此大的交换,请记住,这可能会显着降低性能。
最好的替代方法是将 45GB 的训练集分成更小的块。
我正在 运行使用非常大的 (45Gb) 训练集 word2phrase.c。我的 PC 有 16Gb 的物理 RAM 和 4Gb 的交换空间。我把它留在火车上过夜(第二次),早上回来,看到它是 "killed",没有进一步的解释。当我的 RAM 运行 耗尽时,我坐着看着它死去。
我设置在我的/etc/sysctl.conf
vm.oom-kill = 0
vm.overcommit_memory = 2
实际的源代码似乎没有将数据写入文件,而是将其保存在内存中,这就是问题所在。
- 总内存(RAM+SWAP)是用来杀OOM的吗?例如,如果我将 SWAP 增加到 32Gb,这种情况会停止吗?
- 我能否以降低性能为代价强制此进程使用 SWAP 而不是物理 RAM?
问:总内存(RAM+SWAP)是用来杀OOM的吗?
是的。
问:例如,如果我将 SWAP 增加到 32Gb,这种情况会停止吗?
是的,如果 RAM 和交换 space 组合 (48 GB) 足以完成该过程。
问:我能否以降低性能为代价强制此进程使用 SWAP 而不是物理 RAM?
这将由操作系统自动管理。您所要做的就是增加交换 space.
回答第一个问题,是的。
第二个问题: 我可以强制此进程使用 SWAP 而不是物理 RAM
linux 指示进程如何 运行,并为进程适当分配内存。当达到阈值时,linux 将使用交换 space 作为衡量标准。
增加交换 space 在这种情况下可能有效。然后,我不知道 linux 将如何处理如此大的交换,请记住,这可能会显着降低性能。
最好的替代方法是将 45GB 的训练集分成更小的块。