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 - 在 R 中将空值转换为 NULL - 处理日期列

c# - 这个 LINQ 性能从何而来?

amazon-web-services - 亚马逊EC2 ebs vs gp2 ami

r - 将多行合并为一个时间间隔

r - 通过连接点(lon-lat)在 R 中绘制的谷歌地图上查找位置区域

r - 填写大纲

python - 运行内存有限的Python进程

c - 一个char数组可以有多少个字符?

java - 无法在 AWS 实例 (Linux) 上编译 GWT 应用程序

security - EC2 上我的 pem key 文件在哪里?