【问题标题】:GC and memory limit issues with RR 的 GC 和内存限制问题
【发布时间】:2011-03-21 05:17:48
【问题描述】:

我在一些相对较大的数据上使用 R,并且遇到了一些内存问题。这是在 Linux 上。我的数据比系统上的可用内存少得多,因此这是管理瞬态分配的问题。

当我运行 gc() 时,我得到以下列表

           used   (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells   2147186  114.7    3215540  171.8   2945794  157.4
Vcells 251427223 1918.3  592488509 4520.4 592482377 4520.3

然而 R 似乎在常驻内存中分配了 4gb,在交换中分配了 2gb。我假设这是操作系统分配的内存,R 的内存管理系统将根据需要分配和 GC。但是,假设我不想让 R OS 分配超过 4gb,以防止交换抖动。我总是可以使用 ulimit,但它只会崩溃,而不是在减少的空间内工作并更频繁地进行 GC。有没有办法为 gc 触发器指定任意最大值并确保 R 永远不会分配更多?或者我还能做些什么来管理内存使用?

【问题讨论】:

    标签: memory r garbage-collection


    【解决方案1】:

    简而言之:没有。我发现你根本无法微观管理内存管理和gc()。

    另一方面,您可以尝试将数据保存在内存中,但在 R 的“外部”。bigmemory 使这相当容易。当然,使用 64 位版本的 R 和充足的内存也可以解决问题。

    【讨论】:

    • bigmemory 把东西保存在磁盘上,不是吗?
    • 不,你可能会想到ff。
    • 好的,很高兴澄清这一点。文档说bigmemory“可能使用内存映射文件”。不确定何时或如何相关。我从未研究过 bigmemory 内部结构,但它看起来像是使用 Boost.Interprocess。
    • 如果你也指示它,它可以将内存映射到文件。默认情况下,它只使用 ram。嘿,Jay 和 Mike 是你们 RUG 的当地人,那我为什么要解释这个? ;-)
    • 我知道...Jay 确实解释过了,但我很密集。
    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2019-10-13
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多