【发布时间】:2016-07-04 22:38:48
【问题描述】:
R 的memory.size() 仅适用于 Windows。对于其他功能(例如windows()),帮助页面提供指向非 Windows 对应功能的指针。
但是对于memory.size(),我找不到这样的指针。
所以这是我的问题:在 linux 中是否有与memory.size() 相同的功能?
【问题讨论】:
R 的memory.size() 仅适用于 Windows。对于其他功能(例如windows()),帮助页面提供指向非 Windows 对应功能的指针。
但是对于memory.size(),我找不到这样的指针。
所以这是我的问题:在 linux 中是否有与memory.size() 相同的功能?
【问题讨论】:
我认为这应该由操作系统来处理。我所知道的没有内置限制;如有必要,R 将使用它可以获得的所有内存。
要获取有关 linux 中的总内存和/或可用内存的信息,您可以尝试
system('grep MemTotal /proc/meminfo')
或
system('free -m')
或
system('lshw -class memory')
最后一个命令会抱怨你应该以超级用户身份运行它,它会警告输出可能不准确;但根据我的经验,它仍然会提供相当有用的输出。
要获取有关正在运行的 R 脚本的内存使用情况的信息,可以通过在单独的终端中启动 top 来监视当前使用的资源,或者使用例如 R 脚本中的以下系统调用:
system(paste0("cat /proc/",Sys.getpid(),"/status | grep VmSize"))
希望这会有所帮助。
【讨论】:
memory.size() 给出了 R proc 的内存占用,并且你给出的命令给出了分配给 R 的内存限制(更类似于 R/windows`memory.limit() 命令)
memory.limit() 是特定于 Windows 的。 OP专门询问了Linux。正如我在答案中所写,系统调用可以帮助“获取信息”,而不是向 R 脚本提供任何东西。请在投票前仔细阅读。
使用 pryr 库:
library("pryr")
mem_used()
# 27.9 MB
x <- mem_used()
x
# 27.9 MB
class(x)
# [1] "bytes"
结果与@RHertel 的答案相同,使用 pryr 我们可以将结果分配给变量。
system('grep MemTotal /proc/meminfo')
# MemTotal: 263844272 kB
要通过系统调用分配给变量,请使用intern = TRUE:
x <- system('grep MemTotal /proc/meminfo', intern = TRUE)
x
# [1] "MemTotal: 263844272 kB"
class(x)
# [1] "character"
【讨论】:
是的,memory.size() 和 memory.limit() 在 linux/unix 中不起作用。
我可以推荐 unix 包。
增加linux的内存限制:
install.packages("unix")
library(unix)
rlimit_as(1e12) #increases to ~12GB
你也可以用这个来检查内存:
rlimit_all()
详细信息: https://rdrr.io/cran/unix/man/rlimit.html
您还可以在此处找到更多信息: limiting memory usage in R under linux
【讨论】: