我一直在使用 filebacked.big.matrix 来存储一个非常大的矩阵(约 100 万 x 2 万)。我正在研究一个内存非常高的集群,但不是那么多。我以前使用过 ff 包,它工作得很好,并且尽管矩阵大小保持内存使用一致,但是当我超过矩阵中的 10^32 个项目时它就死了(R 社区确实需要解决这个问题)。filebacked.big.matrix 最初似乎工作得很好并且通常运行没有问题,但是当我检查内存使用情况时,它有时会飙升到 100 GB。我小心地一次只读取/写入矩阵相对较少的行,所以我认为在任何给定时间都不应该有太多的内存。
它是否会进行某种自动内存缓存或导致内存使用量增加的事情?如果是这样,可以禁用或限制此缓存吗?高内存使用对集群造成了一些令人讨厌的副作用,所以我需要一种内存中性的方法来做到这一点。我检查了 filebacked.big.matrix 帮助页面,但在那里找不到任何相关信息。谢谢!
更新:
我也在使用 bigmemoryExtras。
我之前错了,当我循环遍历整个矩阵时,问题就发生了,将它读入一个不同的、较小的 file.backed 矩阵,如下所示:
tmpGeno=fileBackedMatrix(rowIndex-1,numMarkers,'double',tmpDir)
front=1
back=40000
large matrix must be copied in chunks to avoid integer.max errors
while(front < rowIndex-1){
if(back>rowIndex-1) back=rowIndex-1
tmpGeno[front:back,1:numMarkers]=genotypeMatrix[front:back,1:numMarkers,drop=F]
front=front+40000
back=back+40000
}
物理内存使用量最初非常低(虚拟内存非常高)。但是在运行这个循环时,甚至在它完成之后,它似乎只是将大部分矩阵保留在物理内存中。我需要它一次只将一小块矩阵保存在内存中。
更新 2:
这让我有点困惑:集群指标和top
命令说它正在使用大量内存(~80GB),但 gc() 命令说内存使用量从未超过 2GB。该free
命令表示使用了所有内存,但在 -/+ buffers/cache 行中表示总共只使用了 7GB。