Skip to content

Commit 3d87eca

Browse files
tannaladuh95
authored andcommitted
cli: add --max-heap-size option
PR-URL: #58708 Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
1 parent 71a2f82 commit 3d87eca

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

doc/api/cli.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3612,6 +3612,7 @@ V8 options that are allowed are:
36123612
* `--expose-gc`
36133613
* `--interpreted-frames-native-stack`
36143614
* `--jitless`
3615+
* `--max-heap-size`
36153616
* `--max-old-space-size`
36163617
* `--max-semi-space-size`
36173618
* `--perf-basic-prof-only-functions`
@@ -3968,6 +3969,12 @@ documented here:
39683969

39693970
### `--jitless`
39703971

3972+
### `--max-heap-size`
3973+
3974+
Specifies the maximum heap size (in megabytes) for the process.
3975+
3976+
This option is typically used to limit the amount of memory the process can use for its JavaScript heap.
3977+
39713978
<!-- Anchor to make sure old links find a target -->
39723979

39733980
<a id="--max-old-space-sizesize-in-megabytes"></a>

src/node_options.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,7 @@ PerIsolateOptionsParser::PerIsolateOptionsParser(
11571157
"help system profilers to translate JavaScript interpreted frames",
11581158
V8Option{},
11591159
kAllowedInEnvvar);
1160+
AddOption("--max-heap-size", "", V8Option{}, kAllowedInEnvvar);
11601161
AddOption("--max-old-space-size", "", V8Option{}, kAllowedInEnvvar);
11611162
AddOption("--max-old-space-size-percentage",
11621163
"set V8's max old space size as a percentage of available memory "
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
'use strict';
2+
3+
const assert = require('assert');
4+
const { spawnSync } = require('child_process');
5+
const path = require('path');
6+
const fs = require('fs');
7+
const tmpdir = require('./tmpdir');
8+
9+
const testScript = `
10+
const v8 = require('v8');
11+
const stats = v8.getHeapStatistics();
12+
const maxHeapSizeMB = Math.round(stats.heap_size_limit / 1024 / 1024);
13+
console.log(maxHeapSizeMB);
14+
`;
15+
16+
tmpdir.refresh();
17+
const scriptPath = path.join(tmpdir.path, 'heap-limit-test.js');
18+
fs.writeFileSync(scriptPath, testScript);
19+
20+
const child = spawnSync(
21+
process.execPath,
22+
[scriptPath],
23+
{
24+
encoding: 'utf8',
25+
env: {
26+
...process.env,
27+
NODE_OPTIONS: '--max-heap-size=750',
28+
},
29+
},
30+
);
31+
32+
assert.strictEqual(
33+
child.status,
34+
0,
35+
[
36+
`Child process did not exit cleanly.`,
37+
` Exit code: ${child.status}`,
38+
child.stderr ? ` Stderr: ${child.stderr.toString()}` : '',
39+
child.stdout ? ` Stdout: ${child.stdout.toString()}` : '',
40+
].filter(Boolean).join('\n'),
41+
);
42+
const output = child.stdout.trim();
43+
const heapLimit = Number(output);
44+
45+
assert.strictEqual(
46+
heapLimit,
47+
750,
48+
`max heap size is ${heapLimit}MB, expected 750MB`,
49+
);

0 commit comments

Comments
 (0)