在 Node.js 中触发 worker_thread OOM 异常的最佳方法
Best way to trigger worker_thread OOM exception in Node.js
我想测试在 worker_thread OOM 时报告的代码。或者至少尽管由于 OOM 原因导致线程崩溃,但父级还可以。我想专门测试 Node.js 杀死一个 worker_thread.
我什至不确定这是否特别可测试,因为 Node.js 是 运行 的环境似乎有所不同。使用资源限制设置较低的老年代大小 (docs) 并没有像我想象的那样表现,似乎 Node.js 和 OS 正在做很多聪明的事情来保持进程从记忆中爆炸。我得到的最接近的结果是 Node.js 和工人都被杀了。但同样,这不是我期望的行为 - Node.js 应该杀死工人。
有什么方法可以可靠地测试这样的事情吗?当前 运行 v16.13.2.
[编辑]
这是工作人员的一些示例 JS:
const { isMainThread } = require('worker_threads');
if (!isMainThread) {
let as = [];
for (let i = 0; i < 100; i++) {
let a = '';
for (let i = 0; i < 9000000; i++) a += i.toString();
as.push(a);
}
}
好的,在我的案例中添加 maxYoungGenerationSizeMb
似乎导致了我正在寻找的行为:例如{ maxOldGenerationSizeMb: 10, maxYoungGenerationSizeMb: 10 }
.
我想测试在 worker_thread OOM 时报告的代码。或者至少尽管由于 OOM 原因导致线程崩溃,但父级还可以。我想专门测试 Node.js 杀死一个 worker_thread.
我什至不确定这是否特别可测试,因为 Node.js 是 运行 的环境似乎有所不同。使用资源限制设置较低的老年代大小 (docs) 并没有像我想象的那样表现,似乎 Node.js 和 OS 正在做很多聪明的事情来保持进程从记忆中爆炸。我得到的最接近的结果是 Node.js 和工人都被杀了。但同样,这不是我期望的行为 - Node.js 应该杀死工人。
有什么方法可以可靠地测试这样的事情吗?当前 运行 v16.13.2.
[编辑]
这是工作人员的一些示例 JS:
const { isMainThread } = require('worker_threads');
if (!isMainThread) {
let as = [];
for (let i = 0; i < 100; i++) {
let a = '';
for (let i = 0; i < 9000000; i++) a += i.toString();
as.push(a);
}
}
好的,在我的案例中添加 maxYoungGenerationSizeMb
似乎导致了我正在寻找的行为:例如{ maxOldGenerationSizeMb: 10, maxYoungGenerationSizeMb: 10 }
.