【问题标题】:Increasing (or decreasing) the memory available to R processes增加(或减少)R 进程可用的内存
【发布时间】:2015-11-04 14:05:03
【问题描述】:

我想增加(或减少)R 可用的内存量。实现此目的的方法是什么?

【问题讨论】:

    标签: r memory-management memory-leaks


    【解决方案1】:

    发件人:

    http://gking.harvard.edu/zelig/docs/How_do_I2.html (mirror)

    Windows 用户可能会收到 R 内存不足。

    如果您已经安装了 R 并且 随后安装更多 RAM,您可以 必须重新安装 R 才能使用 额外容量的优势。

    您还可以设置金额 手动可用内存。关闭 R, 然后右键单击您的 R 程序 图标(桌面上的图标或 您的程序目录)。选择 “属性”,然后选择 “快捷方式”选项卡。寻找 “目标”字段和结束后 引用 R 的位置 可执行文件,添加

    --max-mem-size=500M

    如下图所示。你可以 将此值增加到 2GB 或 您的最大物理 RAM 量 已安装。

    如果你得到 R 不能的错误 分配一个长度为 x 的向量,关闭 出 R 并将以下行添加到 “目标”字段:

    --max-vsize=500M

    或视情况而定。你总是可以 检查 R 有多少内存 可通过在 R 提示符下键入来获得

    memory.limit()
    

    它为您提供以 MB 为单位的可用内存量。在以前的 R 版本中,您需要使用:round(memory.limit()/2^20, 2)

    【讨论】:

    • 请注意,在 32 位 Windows 上,R 最多只能使用 3Gb 的 RAM,无论您安装了多少。 REvolution Computing 提供了适用于 Windows 的 64 位版本的 R,它在 64 位 Windows 上运行并且可以使用所有可用的 RAM:revolution-computing.com/products/revolution-enterprise.php
    • 只有两个注意事项:(i) memory.limit() 仅适用于 Windows,(ii) 返回正确答案的命令是 round(memory.limit(),2) --至少在我的 R (2.8.1) 版本上。
    • 关于如何在 linux 上获得与 memory.limit() 类似的信息的任何建议?
    • 网页不存在了。没有图像,我很难理解这一点。例如,我没有看到“快捷方式”选项卡。另外,你能用它来减少最大内存吗?
    • 那么,mac 用户呢?我们能做点什么吗?
    【解决方案2】:

    使用memory.limit()。您可以使用此命令增加默认值,memory.limit(size=2500),其中大小以 MB 为单位。您需要使用 64 位才能真正利用这一点。

    另一个建议是尽可能使用内存效率高的对象:例如,使用矩阵而不是 data.frame。

    【讨论】:

    • 我不太明白这是怎么工作的。我遇到了这个内存限制问题并收到错误“达到 8182Mb 的总分配”。我使用的是 64 位和 8GB 内存,所以我似乎是 SOL。但是,对于 shiggles,我设置了 memory.limit(size=50000)...并且它起作用了!但是为什么???
    • 我知道这已经有 7 年历史了,但是我正在尝试减少 R 可以使用的 RAM 量,但是每当我尝试减少值时,我都会收到此消息(我有 12gb Ram在 64 位 Windows 机器上)。警告消息:在 memory.limit(4095) 中:无法减少内存限制:忽略
    【解决方案3】:

    对于 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

    【讨论】:

      【解决方案4】:

      如果可以,Microsoft Windows 会接受来自进程的任何内存请求。

      可以提供给进程的内存没有限制,但虚拟内存大小除外。

      在 32 位系统中,无论您运行多少应用程序,任何进程的虚拟内存大小都是 4GB。任何进程在 32 位系统中最多可以分配 4GB 内存。

      实际上,Windows 会根据进程请求和分页文件机制自动从 RAM 或页面文件中分配部分已分配内存。

      但另一个限制是分页文件的大小。如果你有一个小的页面文件,你不能分配大的内存。您可以根据Microsoft增加分页文件的大小,以获得更多的内存空间。

      【讨论】:

        【解决方案5】:

        要增加分配给 R 的内存量,您可以使用 memory.limit

        memory.limit(size = ...)
        

        或者

        memory.size(max = ...)
        

        关于论据

        • 大小 - 数字。如果 NA 报告内存限制,否则请求新的限制,以 Mb 为单位。在 32 位 R 版本上只允许使用高达 4095 的值,但请参阅“详细信息”。
        • 最大 - 合乎逻辑。如果为 TRUE,则报告从操作系统获得的最大内存量,如果为 FALSE,则为当前正在使用的内存量,如果为 NA,则为内存限制。

        【讨论】:

          【解决方案6】:
          1. 购买更多内存
          2. 切换到 64 位操作系统。结合第 1 点。

          【讨论】:

          • 购买更多内存(并切换到其他操作系统)不是一般合适的解决方案。
          • 当然可以,就像处理适合手头问题的小问题一样。想要一个解决方案通常也不会给你一个解决方案。
          【解决方案7】:

          在 RStudio 中,增加:

          file.edit(file.path("~", ".Rprofile"))
          

          然后在 .Rprofile 中输入并保存

          invisible(utils::memory.limit(size = 60000))
          

          减少: 打开.Rprofile

          invisible(utils::memory.limit(size = 30000))
          

          保存并重新启动 RStudio。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多