我想用参数R --min-nsize=8000000 --min-vsize=2048M
min-nsize
- 这是“节点”的最小数量。每个R对象都是一个节点,因此1,000,000个字符串的列表将占用1,000,000个节点。如果我们可以避免节点,我们不希望用完节点。
min_vsize
- 堆大小(B,K,M或G)。通常这个限制是在节点限制之后达到的,所以值得尝试一下。
我可以在会话中访问这些参数(例如options()
),并且可以在会话中重置它。
答案 0 :(得分:1)
我怀疑R会在会话启动后合并对这些值的更改,但您可以尝试更改相应的环境变量R_NSIZE
和R_VSIZE
。
那就是说,你似乎误解了这些论点的作用。它们仅设置触发垃圾收集的初始值(和下限)。它们与“节点用完”没有任何关系。
如果您尝试控制内存使用量,则需要遵循?memory.limit
中的建议:
要限制类似Unix的内存使用,请使用 用于启动R的shell,例如'limit'或'ulimit'。
如果您正在尝试控制垃圾收集器,R_GC_MEM_GROW
环境变量可能会更有用。如?Memory
中所述:
可以通过设置环境变量来指定用于增长的策略 'R_GC_MEM_GROW'为0到3之间的整数值。此变量在启动时读取。 较高的值会更积极地增加堆,从而减少垃圾收集时间 使用更多内存。