人们用什么技巧来管理交互式R会话的可用内存?我使用下面的函数[根据Petr Pikal和David Hinds在2004年的r-help列表中的帖子]列出(和/或排序)最大的对象,偶尔列出rm()其中的一些.但到目前为止,最有效的解决方案是在具有充足内存的64位Linux下运行.
人们想分享其他任何好玩的伎俩吗?请发一个帖子.
# improved list of objects
.ls.objects <- function (pos = 1, pattern, order.by,
decreasing=FALSE, head=FALSE, n=5) {
napply <- function(names, fn) sapply(names, function(x)
fn(get(x, pos = pos)))
names <- ls(pos = pos, pattern = pattern)
obj.class <- napply(names, function(x) as.character(class(x))[1])
obj.mode <- napply(names, mode)
obj.type <- ifelse(is.na(obj.class), obj.mode, obj.class)
obj.size <- napply(names, object.size)
obj.dim <- t(napply(names, function(x)
as.numeric(dim(x))[1:2]))
vec <- is.na(obj.dim)[, 1] & (obj.type != "function")
obj.dim[vec, 1] <- napply(names, length)[vec]
out <- data.frame(obj.type, …Run Code Online (Sandbox Code Playgroud) 我得到了名义上的错误:
mcfork(): Unable to fork: Cannot allocate memory
Run Code Online (Sandbox Code Playgroud)
试图用mcapply运行一个函数后,但top我说我是51%
这是在EC2实例上,但我确实有最新的R.
有谁知道还有什么可以导致这个错误?
谢谢,
-N
由于我在R Session(8GB Windows PC)中不断达到内存大小限制,我开始remove加载大对象.但是一旦达到此限制,删除对象似乎无法正常工作.
所以,我想知道是否有办法获得R Session大小.我知道可以检索对象的大小(在这个帖子中看到).我想知道是否有办法计算完整的R Session大小(加载包,对象等).
谢谢!
现在使用R,我的记忆几乎已满(已经应用了gc()).有没有办法知道每个变量的内存消耗,以便我知道哪一个占用最多的内存并删除那个.
我正在处理大数据,我有一个 70GB 的 JSON 文件。我正在使用 jsonlite 库将文件加载到内存中。
我曾尝试使用 AWS EC2 x1.16large 机器(976 GB RAM)来执行此加载,但 R 因错误而中断:
Error: cons memory exhausted (limit reached?)
加载 1,116,500 条记录后。考虑到我没有足够的 RAM,我尝试在具有 1.95TB RAM 的更大 EC2 机器上加载相同的 JSON。
加载 1,116,500 条记录后,该过程仍然中断。我使用的是 R 版本 3.1.1,我正在使用--vanilla选项执行它。所有其他设置均为默认设置。
这是代码:
library(jsonlite)
data <- jsonlite::stream_in(file('one.json'))
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我知道有很多类似的问题都得到了公认的答案(这里,这里甚至这个),但到目前为止,我没有找到关于如何在不重新启动 R 会话的情况下释放一些内存空间的明确答案。
我知道,可以保存他的工作区,重新启动 R 并重新加载工作区,但是:
情况似乎并非如此。即使在删除了我工作区的一半最大对象(感谢这个很好的答案)并运行之后gc(),top仍然给我提供了完全相同的内存使用百分比。
这里的一个评论,它说:
R 的垃圾收集将 RAM 标记为可用。由您的操作系统来收回
听起来不错,但不确定这真的发生了。top即使在rm()和之后gc(),甚至在操作系统中启动新的其他进程之后,甚至在 2 小时、10 小时或 3 天之后,仍然向我显示 R 使用的相同数量的内存。
这个评论表明它必须查看加载的库和图形设备,但为什么呢?我该如何解决?
如果我rm()一个3GB对象然后gc()用来释放内存,R 怎么可能仍然使用相同百分比的内存?
我正在抓一个网站,并从for-loop调用我的抓取功能.在循环的4,000次迭代中,我的计算机警告我RStudio使用了太多的内存.但是在使用转义键断开循环之后,我在R环境中看不到任何大对象.
我尝试了这两个 帖子的提示,但他们没有透露原因.当我mem_used()从pryr包裹打电话时,我得到:
2.3 GB
这与Windows任务管理员最初所说的一致.它表示2.3 GB,然后在循环结束后十分钟内降至1.7 GB,在循环后二十分钟内降至1.2 GB. mem_used()继续说2.3 GB.
但根据lsos()上面链接的第一篇文章中的函数,我的R对象很小:
> lsos()
Type Size Rows Columns
all_raw tbl_df 17390736 89485 12
all_clean tbl_df 14693336 89485 15
all_no_PAVs tbl_df 14180576 86050 15
all_no_dupe_names tbl_df 13346256 79646 15
sample_in tbl_df 1917128 9240 15
testdat tbl_df 1188152 5402 15
username_res tbl_df 792936 4091 14
getUserName function 151992 NA NA
dupe_names tbl_df 132040 2802 3
time_per_iteration numeric 65408 4073 NA
Run Code Online (Sandbox Code Playgroud)
这说我最大的对象是17 MB,不接近2.3 GB.我怎样才能找到内存使用的罪魁祸首并修复它?循环中是否存在逐渐占用内存的东西? …