Jest似乎不受node --max-old-space-size选项的影响。

19

我一直在努力解决运行jest时出现的明显内存泄漏问题,详见此处:https://github.com/facebook/jest/issues/7874

我想直接给jest分配大量堆空间,这样尽管存在内存泄漏,我的测试也能顺利完成。然而,使用以下命令行:

node --max-old-space-size=8192 --expose-gc ./node_modules/.bin/jest --no-cache --runInBand --logHeapUsage

当堆使用量达到大约1500MB时,我仍然会收到“Javascript堆内存不足”的错误信息。如果我运行:

node --max-old-space-size=8192

然后执行:

> v8.getHeapStatistics()
{
   ...
   heap_size_limit: 8640266240
   ...
}

很明显我能够影响Node的堆大小,但是它却不会影响Jest。

Node版本: 16.13.0 Jest版本: 27.4.4 有什么想法吗?


1
你解决了这个问题吗?我也遇到了同样的问题。 - seth
4
还没有解决,我们目前无法在夜间构建中运行我们的Jest测试,因为存在Jest内存泄漏问题。尽管我们已经尝试了Jest补丁,但它甚至也不能始终正常工作。我们感到很沮丧。 - Eric Hill
我建议使用Node v18。我们之前遇到了内存消耗问题,但当我切换到v18后,问题就消失了。 - undefined
2个回答

1
也许你的 jest.config.js 中的这些设置可以为你解决这个问题:
{
    maxWorkers: 1,
    globals: {
        'ts-jest': {
            isolatedModules: true
        }
    }
}

我记得我曾经遇到过和你一样的问题,而我通过所有这些配置解决了它。不确定哪个部分起了关键作用,但是试试看吧,我想这样做没什么坏处。


太棒了,工作得非常顺利,谢谢!但我真的不知道为什么! - garryp

0
我认为你可以将问题设置--max-old-space-size=8192调整为较小的值来解决。可能在运行jest时,你正在从V8进程中占用内存。
这是一个关于你问题的参考资料,但更加通用。

我有很多内存(嗯,在这台机器上有16GB)。我有一个函数需要超过2GB(默认分配的)的内存。我知道我可以承受4或8GB。问题在于jest测试运行器在某个节点进程中运行(可能是一个node.vm),我们正在寻找一种允许它使用更多内存的方法。 - joegomain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接