Repository navigation
--max-semi-space-size doc is wrong after Node 18 #55487
Copy link
Copy link
Closed
Labels
docIssues and PRs related to Node.js documentation.Issues and PRs related to Node.js documentation.
Description
Activity
- addeddocIssues and PRs related to Node.js documentation.Issues and PRs related to Node.js documentation.
on Oct 22, 2024 PRs are always welcome :-)
@redyetidev I'll try to determine where the crossover point is, that is, at what memory limit the new default equals the old default (>2GiB) and then I'll draft a true statement for the docs.
Reacted by Aviv KellerThe breakeven point in node:20 seems to be above memory limit 2g
docker run -it -m 3g \ node:20 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' 1584docker run -it -m 3g \ -e NODE_OPTIONS="--max-semi-space-size=16" \ node:20 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' 1584
node:18 seems to support the new NODE_OPTIONS
docker run -it -m 512m \ -e NODE_OPTIONS="--max-old-space-size=384" \ node:18 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' 432
docker run -it -m 512m \ -e NODE_OPTIONS="--max-old-space-size=384 --max-semi-space-size=16" \ node:18 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' 432
Without an explicit semi-space-size in node:20, the young generation in this case is only 3MB
docker run -it -m 512m \ -e NODE_OPTIONS="--max-old-space-size=384" \ node:20 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' 387
Configuring semi-space-size, below, for same young generation size (48MB) as node:18
docker run -it -m 512m \ -e NODE_OPTIONS="--max-old-space-size=384 --max-semi-space-size=16" \ node:20 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' 432
node:14 fails the new option
docker run -it -m 512m \ -e NODE_OPTIONS="--max-old-space-size=384 --max-semi-space-size=16" \ node:14 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' node: --max-semi-space-size= is not allowed in NODE_OPTIONS
@redyetidev PR: #55495
- added 3 commits that reference this issue
on Nov 6, 2024
Metadata
Metadata
Assignees
Labels
docIssues and PRs related to Node.js documentation.Issues and PRs related to Node.js documentation.
Affected URL(s)
https://github.com/nodejs/node/blob/main/doc/api/cli.md#--max-semi-space-sizesize-in-mib
Description of the problem
The docs read:
This may have been true in Node 18 but in the newer version of v8 (11.3) used in Node 20, the default scales with the memory limit, and will generally be less than this documented value.
See https://blog.ztec.fr/en/2024/post/node.js-20-upgrade-journey-though-unexpected-heap-issues-with-kubernetes/
Running the example from the docs on Node 18:
1584-1536 = 48MB = 3 x
max-semi-space-sizeNow in Node 20:
1560-1536 = 24MB, so
max-semi-space-sizedefaults to 8 here 👈In order to run with the same heap size limit in Node 20, you must explicitly set the
max-semi-space-size:👉 1584-1536 = 48MB, same as Node 18