【问题标题】:Linux C app runs out of memoryLinux C 应用程序内存不足
【发布时间】:2015-11-08 15:46:43
【问题描述】:

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

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

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

实际的源代码似乎并未将数据写入文件,而是将其保存在内存中,这会产生问题。

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

【问题讨论】:

  • 如果 100% 的准确性并不重要,那么您就不能将您的设置分成 10 个块并手动编译结果吗?
  • @GradyPlayer 如果增加 SWAP 不能解决这个问题,我可能不得不这样做。不幸的是,这需要我进行在线培训,这可能是不可能的(我不知道网络模型究竟是如何工作的)。
  • @Alex - 如果不断分配和释放内存,则会出现潜在问题。虚拟页面最终会出现不可用的间隙。像 Microsoft 的 .net 框架这样的环境偶尔会暂停进程并重新打包内存页面以避免此问题。我不知道 Linux 的等价物是什么,这可能不是 word2phrase 内存不足的原因。

标签: c linux out-of-memory


【解决方案1】:

问:总内存(RAM + SWAP)是否用于杀死 OOM?

是的。

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

是的,如果 RAM 和交换空间的总和 (48 GB) 足以供进程使用。

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

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

【讨论】:

    【解决方案2】:

    要回答第一个问题,是的。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多