mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
src: assert memory calc for max-old-space-size-percentage
Add validation to ensure that --max-old-space-size-percentage cannot be used when available memory cannot be calculated, preventing undefined behavior when memory detection fails. Also enhance test-process-constrained-memory.js to support testing in constrained environments where memory calculation may fail. PR-URL: https://github.com/nodejs/node/pull/59460 Reviewed-By: theanarkh <theratliter@gmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
This commit is contained in:
@@ -138,6 +138,11 @@ void PerIsolateOptions::HandleMaxOldSpaceSizePercentage(
|
||||
? constrained_memory
|
||||
: total_memory;
|
||||
|
||||
if (available_memory == 0) {
|
||||
errors->push_back("the available memory can not be calculated");
|
||||
return;
|
||||
}
|
||||
|
||||
// Convert to MB and calculate the percentage
|
||||
uint64_t memory_mb = available_memory / (1024 * 1024);
|
||||
uint64_t calculated_mb = static_cast<size_t>(memory_mb * percentage / 100.0);
|
||||
|
||||
@@ -119,14 +119,19 @@ assert(
|
||||
|
||||
// Validate heap sizes against system memory
|
||||
const totalMemoryMB = Math.floor(os.totalmem() / 1024 / 1024);
|
||||
const margin = 10; // 5% margin
|
||||
const uint64Max = 2 ** 64 - 1;
|
||||
const constrainedMemory = process.constrainedMemory();
|
||||
const constrainedMemoryMB = Math.floor(constrainedMemory / 1024 / 1024);
|
||||
const effectiveMemoryMB =
|
||||
constrainedMemory > 0 && constrainedMemory !== uint64Max ? constrainedMemoryMB : totalMemoryMB;
|
||||
const margin = 10; // 10% margin
|
||||
testPercentages.forEach((percentage) => {
|
||||
const upperLimit = totalMemoryMB * ((percentage + margin) / 100);
|
||||
const upperLimit = effectiveMemoryMB * ((percentage + margin) / 100);
|
||||
assert(
|
||||
heapSizes[percentage] <= upperLimit,
|
||||
`Heap size for ${percentage}% (${heapSizes[percentage]} MB) should not exceed upper limit (${upperLimit} MB)`
|
||||
);
|
||||
const lowerLimit = totalMemoryMB * ((percentage - margin) / 100);
|
||||
const lowerLimit = effectiveMemoryMB * ((percentage - margin) / 100);
|
||||
assert(
|
||||
heapSizes[percentage] >= lowerLimit,
|
||||
`Heap size for ${percentage}% (${heapSizes[percentage]} MB) should not be less than lower limit (${lowerLimit} MB)`
|
||||
|
||||
Reference in New Issue
Block a user