是否可以在R会话中手动分配内存?我在共享windows服务器上工作,有时会遇到内存问题。当使用Stata时,是否可以为该会话分配内存:
set min_memory 50gR中有类似的东西吗?
编辑以提供更好的上下文:
为什么我需要这样的命令?
假设我们有一个脚本,它的内存使用高峰为20 5Gb,但大多数情况下只使用5GB。R处理这一问题的自然方法是只在需要时分配内存(在大多数情况下这似乎是合理的)。但是,假设您需要在一个共享服务器上运行这个程序(比这个服务器拥有更多的RAM ),由于其他用户的需要,该服务器在程序峰值时没有20 to的空闲内存。
在这种情况下,我认为最好是避免这样的风险,以前分配20 it您将需要的R会话(在Stata中是可能的)时,启动程序,然后避免浪费资源的运行,甚至不会完成。
发布于 2017-08-01 19:44:58
TL;DR:,我做了大量的调查,没有发现任何在“最小内存大小”设置中暗示过的东西。
如果我正确理解了您的问题,您希望让R请求一个会话的大量内存(20 Gb),然后单独管理这个内存,以确保在需要时资源是可用的。据我所收集到的,这是不可能的,这大约是与R的设计师所采用的策略相反。
如您所述,R通过以下方式分配和管理内存:
对于小的分配,我认为步骤3是使用使用堆栈的C函数alloca()完成的,而对于较大的配置,则使用在堆上分配的malloc()。这实际上意味着R可以请求一个小内存池(根据高级R的说法是128个字节)来管理自己的小对象,这些对象来来往往很快,但是对于较大的对象,它让操作系统来处理它。
我从源代码和R内件的评论中看到的所有关注都表明,开发团队专注于编写只包含当前计算所需内存的软件,然后立即释放它:
我们希望将堆大小设置为足以满足当前计算的级别。当前机制仅使用当前活动堆的大小来提供有关当前需求的信息;由于当前活动堆大小可能非常不稳定,因此调整机制只进行逐步调整。更复杂的策略是使用更多的活动堆历史记录(来源中的第314-320行)。
尽管如此,可能会有一个包或扩展已经重写了一些我不知道的核心功能--尽管这似乎是与R编写方式的巨大背离--它可能是项目的一个分支,而不是一个包。如果你自己对此不感兴趣,我会推荐一个更普通的解决方案,比如在一夜之间运行你的程序,以避免资源竞争。或者增量地处理数据,或者查看像数据库或bigmemory包这样的东西是否可以帮助您。祝好运!
https://stackoverflow.com/questions/45359483
复制相似问题