在nodejs中运行mocha测试用例时出现内存不足异常

2024-01-07

对于单元测试我正在使用mocha最近我正在观察out of memory exception运行测试用例时

--- Last few GCs --->

  548213 ms: Scavenge 1365.3 (1457.7) -> 1365.3 (1457.7) MB, 1.2 / 0 ms (+ 1.5 ms in 2 steps since last GC) [allocation failure] [incremental marking delaying mark-sweep].
  549442 ms: Mark-sweep 1365.3 (1457.7) -> 1364.3 (1457.7) MB, 1228.6 / 0 ms (+ 2.8 ms in 4 steps since start of marking, biggest step 1.2 ms) [last resort gc].
  550603 ms: Mark-sweep 1364.3 (1457.7) -> 1309.1 (1457.7) MB, 1161.4 / 0 ms [last resort gc].


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x30d0b01e3ac1 <JS Object>
    2: _compile [module.js:~380] [pc=0x333b9a368f36] (this=0x29e81578a591 <a Module with map 0x364941617b89>,content=0x4ec389e5fd1 <Very long string[26212]>,filename=0x31a758c32891 <String[92]: /Users/pulkit.sharva/apps/code/node_modules/bluebird/js/release/debuggability.js>)
    3: .js [module.js:~420] [pc=0x333b9869e18b] (this=0x1b3ffe7cfcc9 <an Object with map 0x364941655fb9>,mod...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
sh: line 1: 38263 Abort trap: 6           NODE_ENV=test istanbul cover _mocha -- --timeout 3000 -R spec --recursive test

无论如何/有没有工具可以让我确定哪个测试用例导致了这个问题,因为我可以看到我的堆大小正在快速增加

code pulkit.sharva$ node --expose-gc
        > process.memoryUsage();
        { rss: 21069824, heapTotal: 9587488, heapUsed: 4520544 }
        > process.memoryUsage();
        { rss: 22892544, heapTotal: 9587488, heapUsed: 5407376 }
        > process.memoryUsage();
        { rss: 23261184, heapTotal: 10619424, heapUsed: 5785296 }
        > process.memoryUsage();
        { rss: 23560192, heapTotal: 10619424, heapUsed: 6075440 }
        > process.memoryUsage();
        { rss: 23642112, heapTotal: 10619424, heapUsed: 6158888 }
        > process.memoryUsage();
        { rss: 23715840, heapTotal: 10619424, heapUsed: 6231968 }

好吧,所以我对为什么会这样没有一个很好的答案,但似乎测试本身是否存在实际错误(缺少需求、未定义的函数等),摩卡并不总是能很好地解决这个问题为了抛出错误并终止测试,它决定死死地抓住它,直到发生堆溢出并且整个节点崩溃。

我正在我们自己的代码库中进行游戏,我们的测试设置中有一个部分,如下所示:

// TODO: why do we need these?
process.on("unhandledRejection", err => {
  throw err;
});
process.on("uncaughtException", err => {
  throw err;
});

因为我正在进行重构并且没有明显的答案,所以我删除了这些行,编写了一个新测试(意外出现问题)并得到了溢出错误,就像您所描述的那样。我重新添加了这些行,然后摩卡实际上完成了让我知道测试中的实际问题。

老实说,我不是 100% 确定为什么这段代码似乎会阻止这种情况,并且希望其他评论者或答案更深入,但对于其他遇到此问题的人来说,这可能会帮助您摆脱困境。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在nodejs中运行mocha测试用例时出现内存不足异常 的相关文章

随机推荐