Skip to content

Commit 285e036

Browse files
kjinofrobots
authored andcommitted
src: configure v8 isolate with uv_get_constrained_memory
This change adds the ability to set the memory ceiling for a Node.js process according to a memory limit set by cgroups (via uv_get_constrained_memory), which is used by docker containers to set resource constraints. Previously we would use the physical memory size to estimate the necessary V8 heap sizes, but the physical memory size is not necessarily the correct limit, e.g. if the process is running inside a docker container or is otherwise constrained. Non-Linux systems shouldn't be affected. PR-URL: #27508 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Ali Ijaz Sheikh <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Сковорода Никита Андреевич <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Michael Dawson <[email protected]>
1 parent 492037a commit 285e036

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

src/api/environment.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,10 @@ void FreeArrayBufferAllocator(ArrayBufferAllocator* allocator) {
179179
}
180180

181181
void SetIsolateCreateParamsForNode(Isolate::CreateParams* params) {
182-
const uint64_t total_memory = uv_get_total_memory();
182+
const uint64_t constrained_memory = uv_get_constrained_memory();
183+
const uint64_t total_memory = constrained_memory > 0 ?
184+
std::min(uv_get_total_memory(), constrained_memory) :
185+
uv_get_total_memory();
183186
if (total_memory > 0) {
184187
// V8 defaults to 700MB or 1.4GB on 32 and 64 bit platforms respectively.
185188
// This default is based on browser use-cases. Tell V8 to configure the

0 commit comments

Comments
 (0)