lis*_*tor 6 memory perl6 moarvm
我必须对大约200万行数据进行数据分析,每行大约250字节.总共大约500兆字节的数据.我在带有4G内存的Virtualbox Linux上运行最新的Rakudo.
大约8个小时后,由于内存不足,我得到了MoarVM的恐慌.如何为MoarVM提供更多内存?不幸的是,由于部分数据分析需要整个2米的行,所以我不能将2百万分成块并写入文件.
非常感谢你 !!!
lisprog
MoarVM对内存没有自己的上限(例如,与JVM不同).相反,它仅在从操作系统请求内存并且拒绝该请求时才给出"内存不足"或"内存分配失败"错误.这可能是因为配置的内存限制,或者实际上可能没有那么多可用的RAM /交换空间来满足所做的请求(可能是您没有配置限制).
由于问题中的程序细节很少,因此很难提供有关下一步尝试的具体建议,但有些可能有用的方法是:
for $fh.lines { ... }只需要保留Str当前正在处理内存的行,同时my @lines = $fh.lines; for @lines { }保留所有内容Str周围的物体).:enc<ascii>在打开文件时传递或类似.这可能会导致更小的内存表示.my int8 @a并存储了一百万个元素,那么它需要1 MB的内存; 做到这一点,my @a他们都将是一个Scalar容器内的盒装对象,在64位机器上,可以吃超过70MB.如果您有一个可以创建许多实例的对象,并且可能能够将某些属性设置为本机,则类似也适用.我建议您分几个步骤解决您的问题:
如果尚未准备好,请准备两个小示例文件。让它们非常小。我建议一个 2,000 行长的文件和一个 20,000 行长的文件。如果您已经有一些大约该长度的示例文件,那么这些就可以了。为每个文件运行程序,记录每个文件花费的时间以及使用的内存量。
使用有关持续时间和 RAM 使用情况的注释更新您的问题;如果可能的话,加上源代码的链接和示例文件(如果可能的话)。
再次运行这两个示例文件,但使用此处所述的探查器。查看有什么内容可以查看并更新您的问题。
如果您不知道如何做这些事情,请在评论中提问。
如果上述所有操作都相当简单,请对 100,000 行文件重复此操作。
那么我们应该有足够的数据来给你更好的指导。