From de201e68d7d6fb58b34d24471837adb366ffde02 Mon Sep 17 00:00:00 2001 From: hyj1991 Date: Thu, 21 Jan 2021 15:36:43 +0800 Subject: [PATCH] fix: improve the calculation of available memory in the docker --- lib/orders/system.js | 25 ++++++++++++++++++++----- package.json | 2 +- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/lib/orders/system.js b/lib/orders/system.js index e23e0d5..26c3d76 100644 --- a/lib/orders/system.js +++ b/lib/orders/system.js @@ -375,12 +375,27 @@ var getLoadAvg = function (callback) { var dockerFreeMemory = function (callback) { const mem_used_path = path.join(cgroupBaseDir, '/memory/memory.usage_in_bytes'); - fs.readFile(mem_used_path, 'utf8', function (err, data) { + const mem_stat_path = path.join(cgroupBaseDir, '/memory/memory.stat'); + + fs.readFile(mem_used_path, 'utf8', function (err, mem_used) { if (err) { return callback(err); } - var used = Number(data.trim()); - return callback(null, totalMemory - used); + + const used_size = Number(mem_used.trim()); + fs.readFile(mem_stat_path, 'utf8', function (err, mem_stat) { + if (err) { + return callback(err); + } + + const mem_stat_obj = mem_stat.trim().split('\n').map(v => v.split(' ')) + .reduce((r, v) => { r[v[0]] = v[1]; return r; }, {}); + const total_active_file_size = Number(mem_stat_obj.total_active_file.trim()); + const total_inactive_file_size = Number(mem_stat_obj.total_inactive_file.trim()); + + const freeMemory = totalMemory - used_size + (total_active_file_size + total_inactive_file_size); + return callback(null, freeMemory); + }); }); }; @@ -406,7 +421,7 @@ var linuxFreeMemroy = function (callback) { if (isMemAvailable) { if (pair[0] === 'MemAvailable') { - free = parseInt(pair[1], 10) * 1024; + free = parseInt(pair[1], 10) * 1024; } } else { if (['MemFree', 'Buffers', 'Cached'].indexOf(pair[0]) >= 0) { @@ -448,7 +463,7 @@ var getFreeMemory = function (callback) { } }; -var initTotalMemory = function() { +var initTotalMemory = function () { totalMemory = os.totalmem(); if (!isDocker) { // keep os.totalmem() diff --git a/package.json b/package.json index fc04f41..a8d7a42 100644 --- a/package.json +++ b/package.json @@ -37,4 +37,4 @@ "client.js", "start_client.js" ] -} \ No newline at end of file +}