小编Dav*_*ard的帖子

Nodejs 16 和 NodeJS 14 之间的最大旧空间大小发生变化吗?

我们使用 --max-old-space-size=8192 通过 npm test 运行完整的 E2E jest 26 测试。

node --max-old-space-size=8192 node_modules/jest/bin/jest --runInBand --coverage --detectOpenHandles --logHeapUsage --no-cache
Run Code Online (Sandbox Code Playgroud)

我们升级到节点 16.14.2,突然测试在 Windows 和 Ubuntu 20.04.4 LTS 下的 OOM 处停止在 4G。

与节点 17.8.0 的行为相同

我切换回节点 14.18.1 并使用进程资源管理器查看以下性能图。

“npm test”的节点 14.18.1 流程资源管理器性能图

对于节点 16,我在 E2E 测试开始时在 4G 时出现 OOM。

“npm test”的节点 16.14.2 流程资源管理器性能图

<--- Last few GCs --->

[14184:00000277700CA440]  1097059 ms: Mark-sweep (reduce) 2799.4 (3161.8) -> 2798.8 (3123.2) MB, 1520.8 / 0.4 ms  (average mu = 0.099, current mu = 0.064) last resort GC in old space requested
[14184:00000277700CA440]  1098475 ms: …
Run Code Online (Sandbox Code Playgroud)

node.js jestjs

5
推荐指数
1
解决办法
3565
查看次数

cls-hook 内存泄漏或错误使用?

以下代码会增加内存使用量直至崩溃:

const httpContext = require('express-http-context');
async function t2() {
}

async function t1() {
  for (let i = 0; i < 100000000; i++) {
    httpContext.ns.run(t2);
  }
}
t1();
Run Code Online (Sandbox Code Playgroud)

运行它:node --inspect --max-old-space-size=300 ns

问题:命名空间 _contexts 映射永远不会被清理。

cls-hooked/context.js 中有一个函数 destroy(id) 但它从未被调用。

我还尝试了 ns.bind、ns.runPromise (它执行 ns.exit())和 ns.bind

运行结束后如何删除上下文?

代码:

const httpContext = require('express-http-context');
function t2() {
}

async function t1() {
  for (let i = 0; i < 100000000; i++) {
    httpContext.ns.run(t2);
  }
}
t1();
Run Code Online (Sandbox Code Playgroud)

作品。

代码:

const httpContext = require('express-http-context');
async function …
Run Code Online (Sandbox Code Playgroud)

node.js express cls-hooked

3
推荐指数
1
解决办法
5681
查看次数

标签 统计

node.js ×2

cls-hooked ×1

express ×1

jestjs ×1