【问题标题】:Why does r gc() function report higher memory usage than windows task manager为什么 r gc() 函数报告的内存使用率比 windows 任务管理器高
【发布时间】:2018-05-03 00:08:00
【问题描述】:

我目前在 r 中使用data.table 包在运行 64 位 Win 10 的 8GB 内存的笔记本电脑上处理一个大型(30M 行,14+ 列)数据集。

我整天都在达到内存限制,收到 R 无法为向量分配略高于 200MB 的错误。当我查看 Windows 任务管理器时,我可以看到 R 当前正在使用 2-3GB 的 RAM(或大约 65% 的内存,包括系统和其他一些进程)。当我运行 R gc() 命令时,我得到了输出,即 8012Mb 中的大约 7800Mb 当前正在使用中。

当我第二次运行gc() 命令时,由于之前执行了gc,我可以看到已用内存没有变化。

在处理数据时(即执行一些data.table 命令),该进程几乎使用了所有已安装的内存并将一两个东西写入磁盘。

gc() 输出与我在任务管理器中看到的不同的原因是什么?或者更准确的说,为什么任务管理器里的数字少了?

【问题讨论】:

    标签: r memory garbage-collection taskmanager


    【解决方案1】:

    假设 Windows 的本机任务管理器仅显示物理 RAM 统计信息,很可能(根据我的经验确实如此)R 使用的其余内存(您的“缺失”5-6 Gb)分配给windows的交换文件(那时真的很慢)。您可以通过 e 自行检查。 G。使用我使用的process explorer 并显示虚拟内存(包括磁盘上的)。

    内存分配是在 RAM 结束之前完成的,当然是为了防止系统崩溃。根据我的经验,windows 根本不会交换 R 内存,并且在某个点上它的限制刚刚达到,你会得到一些 Error: cannot allocate vector of size 200 Mb - 另请参阅 this question

    我猜你想通过gc() 释放内存,虽然运行的用途是controversially discussed

    如果您没有其他具有更多 RAM 的机器并且不喜欢升级笔记本电脑的 RAM,您可以查看主题 cloud computing

    希望对你有所帮助。

    【讨论】:

    • 谢谢。你知道我是否可以说服data.table 在计算过程中多使用磁盘,这样它就不需要那么多内存了吗?
    • 没关系,我只是尝试将memory.limit 增加到我实际安装的两倍,我想它可以正常工作并按应有的方式使用磁盘,而不会使系统发疯。我害怕这样做,因为我不知道 R 是否真的会使用高达 100% 的物理 RAM,然后机器将基本上无法使用......
    • 您也可以 1. 尝试increase windows 交换文件 2. 将您的数据集简单地修剪为您需要的列 3. 使用save(mydata, file= "mydata.RData") 将其保存为可能较小的 R 格式重新启动 R 和只需通过load("mydata.Rdata") 加载即可。 顺便说一句: 由于 R 可能会在没有自动保存的情况下崩溃,因此您可能希望在运行任何可能占用大量 RAM 的命令之前保存您的代码。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 2010-11-17
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多