Hi there,
I've just updated Rsamtools to the latest version ("1.22.0") and I've noticed a weird memory leak that is crashing my system.
I have a folder of ~150 bam files that I'm trying to process, feeding in a data.frame called filter, that splits the genome into 7744 genomic coordinates
For some reason, Rsamtools is not releasing RAM after each iteration. I assumed it was my code, but I just ran the following simple test, and unless I'm being completely stupid, Rsamtools is doing something funny. To test this I looped one bam file with the following script and monitored RAM usage:
This generates the two attached graphs. You'll see that while the RAM used for the R object remains stable, the overall RAM usage of my computer increases, and only decreases when I end my R session. Is there any way of purging the RAM? Is this a bug in Rsamtools or have I done something wrong? The additive overall RAM usage also occurs when the scanBam(which()) is not used, but occurs at a much reduced rate.
Any help would be greatly appreciated.
I've just updated Rsamtools to the latest version ("1.22.0") and I've noticed a weird memory leak that is crashing my system.
I have a folder of ~150 bam files that I'm trying to process, feeding in a data.frame called filter, that splits the genome into 7744 genomic coordinates
Code:
> head(filter)
V1 V2 V3 V4
1 GL896898 0 30180132 GL896898:0-30180132
2 GL896898 30180133 52375790 GL896898:30180133-52375790
3 GL896899 0 24984016 GL896899:0-24984016
4 GL896899 24984017 40953715 GL896899:24984017-40953715
5 GL896905 0 18438707 GL896905:0-18438707
6 GL896905 18438708 27910907 GL896905:18438708-27910907
Code:
#R implementation of top
library(NCmisc)
#R value of all objects
library(pryr)
library(Rsamtools)
filter=read.table('ferret_merged_sce_events.bed')
fileName='AAAGCA.merge.bam'
objectRam=vector()
totalRam=vector()
for(seq in 1:10)
{
message(paste("iteration", seq))
bam.dataframe <- scanBam(fileName, param=ScanBamParam(which=GRanges(seqnames = c(as.character(filter[,1])), ranges = IRanges(c(filter[,2]), c(filter[,3]) )), mapqFilter=10, what=c("rname","pos","strand")))
#measure RAM across all R objects
objectRam <- c(objectRam, mem_used()[1]/10^6)
#measure RAM across system
totalRam <- c(totalRam, suppressWarnings(top(CPU=F)$RAM$used*10^6))
#remove scanBam object to reset for next iteration
rm(bam.dataframe)
#empty garbage collection
gc()
}
plot(objectRam, type='l', xlab='iteration', ylab='Ram usage (Mb)')
plot(totalRam, type='l', xlab='iteration', ylab='Ram usage (Mb)')
Any help would be greatly appreciated.
Comment