Skip to content

Commit

Permalink
src: configure v8 isolate with uv_get_constrained_memory
Browse files Browse the repository at this point in the history
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 <anna@addaleax.net>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
  • Loading branch information
kjin authored and ofrobots committed Jul 3, 2019
1 parent 492037a commit 285e036
Showing 1 changed file with 4 additions and 1 deletion.
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

0 comments on commit 285e036

Please sign in to comment.