我多次重写我的程序以不达到任何内存限制。它再次占用了完整的 VIRT,这对我来说没有任何意义。我不保存任何对象。每次完成计算后,我都会写入磁盘。
代码(简化)看起来像
lapply(foNames, # these are just folder names like ["~/datastes/xyz","~/datastes/xyy"]
function(foName){
Filepath <- paste(foName,"somefile,rds",sep="")
CleanDataObject <- readRDS(Filepath) # reads the data
cl <- makeCluster(CONF$CORES2USE) # spins up a cluster (it does not matter if I use the cluster or not. The problem is intependent imho)
mclapply(c(1:noOfDataSets2Generate),function(x,CleanDataObject){
bootstrapper(CleanDataObject)
},CleanDataObject)
stopCluster(cl)
})
bootstrap 函数只是对数据进行采样并将采样的数据保存到磁盘。
bootstrapper <- function(CleanDataObject){
newCPADataObject <- sample(CleanDataObject)
newCPADataObject$sha1 <- digest::sha1(newCPADataObject, algo="sha1")
saveRDS(newCPADataObject, paste(newCPADataObject$sha1 ,".rds", sep = "") )
return(newCPADataObject)
}
我不明白它现在如何累积到超过 60 GB 的 RAM。代码被高度简化,但恕我直言,没有其他可能有问题的地方。如果需要,我可以粘贴更多代码详细信息。
R
即使我已经重写了将生成的对象存储在磁盘上的软件,如何设法连续吃掉我的内存?