我的程序耗尽了内存,就像我运行它们的时间的一半.在Linux下,我可以使用ulimit -v mem-in-kbytes设置可用内存的硬限制.实际上,我使用ulimit -S -v mem-in-kbytes,所以我在程序中得到了正确的内存分配问题,我可以中止.
但是...... ulimit在OSX 10.6中不起作用.我尝试过使用-s和-m选项,但它们无法正常工作.
在2008年,MacRumors对同一个问题进行了一些讨论,但没有人提出一个好的选择.应该是一个程序可以学习它花费太多内存或通过操作系统设置限制的方式.
R的memory.size()仅仅是一个窗口.对于其他功能(例如windows()),帮助页面提供指向非Windows对应项的指针.但是因为memory.size()我找不到这样的指针.所以这是我的问题:是否有一个函数可以做同样memory.size()但在linux中?
有没有办法阻止R在unix机器上使用任何虚拟内存?每当它发生时,都是因为我搞砸了然后我想中止计算.
我正在与其他几个人共享的强大计算机上处理大数据集.有时我会设置需要比可用内存更多RAM的命令,这会导致R开始交换并最终冻结整个机器.通常我可以通过ulimit在我的设置中解决这个问题~/.bashrc
ulimit -m 33554432 -v 33554432 # 32 GB RAM of the total 64 GB
Run Code Online (Sandbox Code Playgroud)
这导致R抛出错误并在尝试分配比可用内存更多的内存时中止.但是,如果我在并行化(通常使用snow包)时做出这种类型的错误,ulimit则无效并且机器无论如何都会崩溃.我想这是因为snow将工作程序作为不以bash运行的单独进程启动.如果我试着设置ulimit我的~/.Rprofile我只是得到一个错误:
> system("ulimit -m 33554432 -v 33554432")
ulimit: 1: too many arguments
Run Code Online (Sandbox Code Playgroud)
有人可以帮我找到实现这个目标的方法吗?
为什么我不能设置ulimit0虚拟内存bash?
$ ulimit -m 33554432 -v 0
Run Code Online (Sandbox Code Playgroud)
如果我这样做很快就会关闭.
我一直在查看有关如何增加 R 内存限制的在线解决方案,但这些解决方案似乎只适用于windows或linux 系统。
我使用的是 Mac Mojave 版本 10.14.5、8GB 内存、2.3 GHz Intel Core i5。我的 R 工作室是 64 位,版本 1.1.453
这是来自 gc 函数的报告:
> gc()
used (Mb) gc trigger (Mb) limit (Mb) max used (Mb)
Ncells 6453699 344.7 11897884 635.5 NA 11897884 635.5
Vcells 44221701 337.4 179064532 1366.2 7168 219267441 1672.9
Run Code Online (Sandbox Code Playgroud)
我想知道为什么 Ncells 和 Vcells 的限制如此之低——635.5Mb 和 1672.9Mb?这是否意味着 R 当前仅使用了该数量的内存?这是我的怀疑,所以我想增加它的限制。
我想要做的是:将一个具有 227,795 行的数据框与另一个具有相同行数但具有不同列的数据框合并。这给了我一个错误:
Error: vector memory exhausted (limit reached?)
Run Code Online (Sandbox Code Playgroud)
当我尝试在 227,796 组坐标之间构建距离的大矩阵时,也会发生此错误。
有没有人有任何解决方案来增加 R 在 mac 中的内存限制?如果有 …