summaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorKelvin Jin <kelvinjin@google.com>2019-05-17 15:34:19 -0700
committerAli Ijaz Sheikh <ofrobots@google.com>2019-07-03 09:38:45 -0700
commit285e036ab629f7a3a31f7ea1edf26e039a56c06b (patch)
tree06f427c010582edcdb266c74561b292d79d25c9a /src/api
parent492037ab801391b0a86d1cc1204a5f14d5b74641 (diff)
downloadandroid-node-v8-285e036ab629f7a3a31f7ea1edf26e039a56c06b.tar.gz
android-node-v8-285e036ab629f7a3a31f7ea1edf26e039a56c06b.tar.bz2
android-node-v8-285e036ab629f7a3a31f7ea1edf26e039a56c06b.zip
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: https://github.com/nodejs/node/pull/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>
Diffstat (limited to 'src/api')
-rw-r--r--src/api/environment.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/api/environment.cc b/src/api/environment.cc
index 8c1f5aaff2..4389dba139 100644
--- a/src/api/environment.cc
+++ b/src/api/environment.cc
@@ -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