R 多核 mcfork() : Unable to fork: Cannot allocate memory

标签 r memory amazon-ec2 multicore domc

我收到了名义上的错误:

mcfork(): Unable to fork: Cannot allocate memory

在尝试使用 mcapply 运行一个函数后,但 top 说我在 51%

这是在 EC2 实例上,但我确实有最新的 R。

有谁知道还有什么可能导致这个错误?

谢谢,

-N

最佳答案

问题可能正是错误消息所暗示的:没有足够的内存来 fork 和创建并行进程。

R 本质上需要为每个单独的进程创建内存中所有内容的副本(据我所知,它不使用共享内存)。如果您已经在单个进程中使用了 51% 的 RAM,那么您没有足够的内存来创建第二个进程,因为这总共需要 102% 的 RAM。

试试:

  1. 使用更少的内核 - 如果您尝试使用 4 个内核,您可能有足够的 RAM 来支持 3 个并行线程,但不是 4 个。registerDoMC(2) ,例如,将并行线程数设置为 2(如果您使用的是 doMC 并行后端)。
  2. 使用更少的内存 - 没有看到您的其余代码,很难提出实现此目的的方法。可能有帮助的一件事是确定哪些 R 对象占用了所有内存( Determining memory usage of objects? ),然后从内存中删除您不需要的任何对象(rm(my_big_object))<
  3. 添加更多 RAM - 如果所有其他方法都失败了,请将硬件投入其中,以便拥有更多容量。
  4. 坚持单线程 - R 中的多线程处理是 CPU 和内存的权衡。在这种情况下,您可能没有足够的内存来支持您拥有的 CPU 能力,因此最好的做法可能是坚持使用单个内核。

关于R 多核 mcfork() : Unable to fork: Cannot allocate memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15668893/

相关文章:

r - 最长非零值字符串的总和

c++ - 是否有一种具有 RAII + Ref 计数的语言没有不安全的指针算术?

linux - Amazon ubuntu 实例上的 Hadoop Mutlicluster 安装

r - 如何将 cat 的输出分配给一个对象?

R:计算大距离矩阵的更快方法

r - 合并后是否有可用的 _merge 指示器?

c++ - 如何对非 .NET 应用程序/DLL 的内存使用情况进行分类?

java - 对象的内存使用情况

amazon-ec2 - 在一个 AWS EC2 实例(Elastic Beanstalk)上运行多个环境

amazon-web-services - 自动化 Opsworks : How do you execute recipes?