gpt4 book ai didi

r - 测量R中的峰值内存使用率

转载 作者:行者123 更新时间:2023-12-03 15:37:32 25 4
gpt4 key购买 nike

我正在重写此问题,以澄清我在寻找什么
我想监视RStudio中的内存使用情况,以避免在群集上出现内存不足错误。我正在寻找一种计算峰值内存使用量的方法,包括全局变量和局部变量。例如,峰值内存使用量应考虑函数中的中间变量并应用循环。
编辑:这个赏金即将过期,但是我仍然没有找到我想要的东西。我想要可以连续监视内存使用情况的内容,而不仅仅是打印到控制台上。

gc(reset = T)
sum(gc()[, "(Mb)"]) # 172Mb

lapply(1:3, function(x) {
mx <- replicate(10, rnorm(1e6)) # 80Mb object
mean(mx)
})

sum(gc()[, "(Mb)"]) # 172Mb -- still the same!

最佳答案

lapply返回的对象仅重488个字节,因为它被汇总:垃圾回收在平均值计算后删除了中间对象。help('Memory')提供有关R如何管理内存的有用信息。
特别是,您可以使用object.size()跟踪各个对象的大小,并可以使用memory.size()知道每个步骤使用了多少总内存:

# With mean calculation
gc(reset = T)
#> used (Mb) gc trigger (Mb) max used (Mb)
#> Ncells 405777 21.7 831300 44.4 405777 21.7
#> Vcells 730597 5.6 8388608 64.0 730597 5.6
sum(gc()[, "(Mb)"])
#> [1] 27.3

l<-lapply(1:3, function(x) {
mx <- replicate(10, rnorm(1e6)) # 80Mb object
mean(mx)
print(paste('Memory used:',memory.size()))
})
#> [1] "Memory used: 271.04"
#> [1] "Memory used: 272.26"
#> [1] "Memory used: 272.26"

object.size(l)
#> 488 bytes


## Without mean calculation :
gc(reset = T)
#> used (Mb) gc trigger (Mb) max used (Mb)
#> Ncells 464759 24.9 831300 44.4 464759 24.9
#> Vcells 864034 6.6 29994700 228.9 864034 6.6
gcinfo(T)
#> [1] FALSE
sum(gc()[, "(Mb)"])
#> [1] 31.5
l<-lapply(1:4, function(x) {
mx <- replicate(10, rnorm(1e6))
print(paste('New object size:',object.size(mx)))
print(paste('Memory used:',memory.size()))
mx
})
#> [1] "New object size: 80000216"
#> [1] "Memory used: 272.27"
#> [1] "New object size: 80000216"
#> [1] "Memory used: 348.58"
#> [1] "New object size: 80000216"
#> [1] "Memory used: 424.89"
#> [1] "New object size: 80000216"
#> [1] "Memory used: 501.21"

object.size(l)
#> 320000944 bytes
sum(gc()[, "(Mb)"])
#> [1] 336.7
reprex package(v0.3.0)创建于2020-08-20
如果返回整个对象而不是返回 mean,则内存使用量的显着增加。

关于r - 测量R中的峰值内存使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63361306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com