我收到了名义上的错误:
mcfork(): Unable to fork: Cannot allocate memory
在尝试使用 mcapply 运行一个函数后,但 top
说我在 51%
这是在 EC2 实例上,但我确实有最新的 R。
有谁知道还有什么可能导致这个错误?
谢谢,
-N
最佳答案
问题可能正是错误消息所暗示的:没有足够的内存来 fork 和创建并行进程。
R 本质上需要为每个单独的进程创建内存中所有内容的副本(据我所知,它不使用共享内存)。如果您已经在单个进程中使用了 51% 的 RAM,那么您没有足够的内存来创建第二个进程,因为这总共需要 102% 的 RAM。
试试:
- 使用更少的内核 - 如果您尝试使用 4 个内核,您可能有足够的 RAM 来支持 3 个并行线程,但不是 4 个。
registerDoMC(2)
,例如,将并行线程数设置为 2(如果您使用的是doMC
并行后端)。 - 使用更少的内存 - 没有看到您的其余代码,很难提出实现此目的的方法。可能有帮助的一件事是确定哪些 R 对象占用了所有内存( Determining memory usage of objects? ),然后从内存中删除您不需要的任何对象(
rm(my_big_object)
)< - 添加更多 RAM - 如果所有其他方法都失败了,请将硬件投入其中,以便拥有更多容量。
- 坚持单线程 - R 中的多线程处理是 CPU 和内存的权衡。在这种情况下,您可能没有足够的内存来支持您拥有的 CPU 能力,因此最好的做法可能是坚持使用单个内核。
关于R 多核 mcfork() : Unable to fork: Cannot allocate memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15668893/