【问题标题】:Alternative to R's `memory.size()` in linux?在 Linux 中替代 R 的`memory.size()`?
【发布时间】:2016-07-04 22:38:48
【问题描述】:

Rmemory.size() 仅适用于 Windows。对于其他功能(例如windows()),帮助页面提供指向非 Windows 对应功能的指针。

但是对于memory.size(),我找不到这样的指针。

所以这是我的问题:在 linux 中是否有与memory.size() 相同的功能?

【问题讨论】:

    标签: r linux memory


    【解决方案1】:

    我认为这应该由操作系统来处理。我所知道的没有内置限制;如有必要,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() 命令)
    • @user189035 好像有误会。除了总可用内存外,没有为 R 进程分配内存限制。我编辑了答案以包括显示正在运行的 R 进程使用的内存的可能性。希望这会有所帮助。
    • memory.limit() 命令将机器内存的总大小提供给 R 脚本。涉及 system() 的命令不向 R 脚本提供任何内容,它们只是在终端上打印内容。对于控制 R 脚本完全没用。
    • @Argent memory.limit() 是特定于 Windows 的。 OP专门询问了Linux。正如我在答案中所写,系统调用可以帮助“获取信息”,而不是向 R 脚本提供任何东西。请在投票前仔细阅读。
    【解决方案2】:

    使用 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"
    

    【讨论】:

      【解决方案3】:

      是的,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

      【讨论】:

        猜你喜欢
        • 2021-05-22
        • 1970-01-01
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 2017-09-17
        相关资源
        最近更新 更多