R 3.6.0预发布版data.table包内存泄漏问题求助
data.table内存泄漏问题仅在R 3.6.0预发布版中出现
我最近在测试**R 3.6.0(预发布版)**的时候,碰到了data.table的内存泄漏问题——不管是用CRAN上的稳定版还是GitHub的开发版,这个问题都存在。
复现代码
require(data.table) n <- 2e6 df <- data.frame( a=rnorm(n), b=factor(rbinom(n,5,prob=0.5),1:5,letters[1:5]), c=factor(rbinom(n,5,prob=0.5),1:5,letters[1:5]) ) dt <- setDT(df) print(pryr::mem_used()) fff <- function(aref) { ff <- lapply(1:5, function(i) { dt2 <- dt[,list(sumA=sum(get(aref))),by=b][,c:=letters[i]] dt2 }) return(rbindlist(ff)) } for(i in 1:10) { f <- fff("a") rm("f") gc() print(pryr::mem_used()) } gc() print(pryr::mem_used())
仅在R 3.6.0中运行的内存使用输出
81.2 MB 81.2 MB 81.2 MB 184 MB 287 MB 390 MB 493 MB 596 MB 699 MB 802 MB
已确认的触发条件
经测试,以下两个条件是触发泄漏的必要条件:
- 调用
get()函数 - 使用
by参数
另外,[,c:=letters[i]]这一步并非必要,但会大幅加快内存泄漏的速度。
我的会话信息如下:
> sessionInfo() R Under development (unstable) (2018-05-10 r74708) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 Matrix products: default locale: [1] LC_COLLATE=English_United States.1252 [2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] data.table_1.11.3 loaded via a namespace (and not attached): [1] compiler_3.6.0 pryr_0.1.4 magrittr_1.5 tools_3.6.0 Rcpp_0.12.16 [6] stringi_1.1.7 codetools_0.2-15 stringr_1.3.0
想请教各位,针对这个问题有什么排查思路吗?
内容的提问来源于stack exchange,提问作者pdb
相关产品推荐
相关产品推荐

