为什么r gc()函数报告的内存使用量高于Windows任务管理器

时间:2017-11-19 18:54:05

标签: r memory garbage-collection taskmanager

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

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

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

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

gc()输出与我在任务管理器中看到的区别的原因是什么?或者更确切地说,为什么任务管理器中的数字会降低?

1 个答案:

答案 0 :(得分:1)

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

内存分配在RAM结束之前完成,当然是为了保护系统免于崩溃。根据我的经验,Windows根本不会交换R内存,并且只是达到了限制,你得到了一些gc() - 另见this question

我猜你想通过 $start_date = ("2017-11-01"); $end_date = ("today"); $ga->requestReportData(ga_profile_id, array('browser', 'browserVersion'), array('pageviews', 'visits'), '-visits', $filter,$start_date,$end_date); 释放内存,尽管使用的是controversially discussed

如果您没有其他具有更多内存并且不想升级笔记本电脑内存的计算机,您可以查看主题cloud computing

我希望这对你有所帮助。