memory - R 的 GC 和内存限制问题

标签 memory r garbage-collection

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

当我运行 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 永远不会分配更多内存?或者我可以采取其他措施来管理内存使用情况?

最佳答案

简而言之:不。我发现您根本无法对内存管理和 gc() 进行微观管理。

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

关于memory - R 的 GC 和内存限制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337306/

相关文章:

java - 丢失的字符串对象会发生什么

java - 字符串常量池内存扇区和垃圾回收

linux - 如何计算 meminfo 中的所有内存?

r - 我的 aggregate() 输出和 tidyverse 输出之间的区别

r - ggpubr:更改 stat_compare_means Kruskal-Wallis p 值的字体大小

java - 编辑 Gradle 后超出 GC 开销限制?

java - 如何确定哪个方法产生最多垃圾

c - 将数组指针传递给要在 C 中的 printf` 中使用的函数

java - Launch4j:多个应用程序的 HeapPercent

r - kerasR 给出错误