Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.
  • Loading branch information
kjin committed Jul 2, 2019
commit 72d6d3f07c95b54a4b8556ebf140381b57b789f0
5 changes: 4 additions & 1 deletion src/api/environment.cc
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,10 @@ void FreeArrayBufferAllocator(ArrayBufferAllocator* allocator) {
}

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