summaryrefslogtreecommitdiff
path: root/test/parallel/test-worker-memory.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/parallel/test-worker-memory.js')
-rw-r--r--test/parallel/test-worker-memory.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/parallel/test-worker-memory.js b/test/parallel/test-worker-memory.js
new file mode 100644
index 0000000000..34b1e0acaf
--- /dev/null
+++ b/test/parallel/test-worker-memory.js
@@ -0,0 +1,41 @@
+// Flags: --experimental-worker
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const util = require('util');
+const { Worker } = require('worker');
+
+const numWorkers = +process.env.JOBS || require('os').cpus().length;
+
+// Verify that a Worker's memory isn't kept in memory after the thread finishes.
+
+function run(n, done) {
+ if (n <= 0)
+ return done();
+ const worker = new Worker(
+ 'require(\'worker\').parentPort.postMessage(2 + 2)',
+ { eval: true });
+ worker.on('message', common.mustCall((value) => {
+ assert.strictEqual(value, 4);
+ }));
+ worker.on('exit', common.mustCall(() => {
+ run(n - 1, done);
+ }));
+}
+
+const startStats = process.memoryUsage();
+let finished = 0;
+for (let i = 0; i < numWorkers; ++i) {
+ run(60 / numWorkers, () => {
+ if (++finished === numWorkers) {
+ const finishStats = process.memoryUsage();
+ // A typical value for this ratio would be ~1.15.
+ // 5 as a upper limit is generous, but the main point is that we
+ // don't have the memory of 50 Isolates/Node.js environments just lying
+ // around somewhere.
+ assert.ok(finishStats.rss / startStats.rss < 5,
+ 'Unexpected memory overhead: ' +
+ util.inspect([startStats, finishStats]));
+ }
+ });
+}