2015-11-08 81 views
1

我正在运行使用非常大的(45Gb)训练集的word2phrase.c。我的电脑有16Gb的物理内存和4Gb的交换空间。我已经把它培训了一夜(第二时间tbh),我早上回来看看它被“杀死”,没有进一步的解释。当我的RAM耗尽时,我坐下来看着它死去。Linux C应用程序内存不足

我在/etc/sysctl.conf

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

实际的源代码中设置不显示写入文件中的数据,而是保存在内存中,这是创造的问题。

  1. 用于杀死OOM的总内存(RAM + SWAP)是多少?例如,如果我将我的SWAP增加到32Gb,这个停止是否会发生?
  2. 我可以强制此过程使用SWAP而不是物理RAM,但性能会降低吗?
+0

如果100%的准确性不重要,那么你不能将你的设置分成10个块并手动编译结果? –

+0

@GradyPlayer我可能不得不这样做,如果增加SWAP不能解决这个问题。 不幸的是,这需要我做在线培训,这可能是不可能的(我不知道网络模型的工作原理)。 –

+0

@Alex - 如果内存不断分配并释放,则会出现潜在问题。虚拟页面最终会出现无法使用的空白。像Microsoft的.net框架这样的环境偶尔会暂停一个进程并重新打包内存页面以避免这个问题。我不知道Linux的等价物是什么,这可能不是word2phrase内存不足的原因。 – rcgldr

回答

1

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

是的。

问:例如,如果我将SWAP增加到32Gb,这个停止是否会发生?

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

问:我可以强制此过程使用SWAP而不是物理RAM,但性能会降低吗?

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

1

回答第一个问题,是的。

第二个问题: 我可以强制使用过程中使用的物理RAM的SWAP,而不是

Linux的决定的过程中是如何运行的,并适当地分配内存的过程。当达到阈值时,linux将使用交换空间作为度量。

在这种情况下,增加交换空间可能会起作用。然后,再次,我不知道linux如何应对如此大的交换,请记住,这可能会显着降低性能。

最好的选择是将45GB的训练集分成更小的块。