我必须对大约200万行数据进行数据分析,每一行大约250字节长。总共大约有500兆字节的数据。我正在使用4G内存的Virtualbox Linux上运行最新的Rakudo。
大约8个小时后,我因内存不足而引起MoarVM恐慌。如何将更多的内存分配给MoarVM?不幸的是,我无法将这2百万数据分割成块,并首先写入文件,因为数据分析的一部分需要整个2-m行。
发布于 2018-08-03 23:27:40
我建议你分几个步骤解决你的问题:
如果你不知道如何做这些事情,请在评论中问。
如果以上所有的操作都很简单,那么重复一个100,000行文件。
那么我们应该有足够的数据来给你更好的指导。
发布于 2018-08-04 16:18:48
MoarVM没有自己的内存上限(例如,JVM)。相反,只有当从操作系统请求内存并拒绝该请求时,它才会产生“内存不足”或“内存分配失败”错误。这可能是由于所配置的内存限制,或者实际上可能没有那么多可用的RAM/交换空间来满足所提出的请求(很可能如果您还没有配置限制)。
考虑到问题中的程序细节不多,很难就下一步要尝试什么提供具体的建议,但有些东西可能会有所帮助:
for $fh.lines { ... }只需要将当前正在处理的行的Str保留在内存中,而my @lines = $fh.lines; for @lines { }将保留所有的Str对象)。:enc<ascii>或类似的。这可能会导致较小的内存表示。my int8 @a并存储了一百万个元素,那么它需要1MB的内存;使用my @a就可以做到这一点,它们都是Scalar容器中的装箱对象,在一个64位的机器上,这个容器可以吃掉70 MB以上的内存。如果您有一个创建了许多实例的对象,并且可能能够使某些属性成为本机属性,则类似的情况也适用。https://stackoverflow.com/questions/51677013
复制相似问题