fix: améliorer calcul RAM (formule free: total-free-buffers-cached) + champs buffers/cached
This commit is contained in:
parent
c534a87e4c
commit
664963b8f7
|
|
@ -199,19 +199,28 @@ function getServerMetrics() {
|
||||||
cpuUsage = dTotal > 0 ? Math.round((1 - dIdle / dTotal) * 100) : 0;
|
cpuUsage = dTotal > 0 ? Math.round((1 - dIdle / dTotal) * 100) : 0;
|
||||||
} catch(e) {}
|
} catch(e) {}
|
||||||
|
|
||||||
// RAM : lecture de /proc/meminfo (valeurs réelles de l'hôte)
|
// RAM : lecture de /proc/meminfo (valeurs réelles via lxcfs)
|
||||||
|
// Formule identique à `free` : used = total - free - buffers - cached
|
||||||
|
// Cela exclut le cache disque du noyau qui est libérable à tout moment
|
||||||
let memTotal = 8589934592; // 8 Go par défaut
|
let memTotal = 8589934592; // 8 Go par défaut
|
||||||
let memFree = 0, memAvailable = 0, memUsed = 0;
|
let memFree = 0, memAvailable = 0, memUsed = 0, memBuffers = 0, memCached = 0;
|
||||||
try {
|
try {
|
||||||
const meminfo = fs.readFileSync('/proc/meminfo', 'utf8');
|
const meminfo = fs.readFileSync('/proc/meminfo', 'utf8');
|
||||||
const getVal = (key) => {
|
const getVal = (key) => {
|
||||||
const m = meminfo.match(new RegExp(`^${key}:\\s+(\\d+)`, 'm'));
|
const m = meminfo.match(new RegExp(`^${key}:\s+(\d+)`, 'm'));
|
||||||
return m ? parseInt(m[1]) * 1024 : 0;
|
return m ? parseInt(m[1]) * 1024 : 0;
|
||||||
};
|
};
|
||||||
memTotal = getVal('MemTotal');
|
memTotal = getVal('MemTotal');
|
||||||
memFree = getVal('MemFree');
|
memFree = getVal('MemFree');
|
||||||
memAvailable = getVal('MemAvailable');
|
memAvailable = getVal('MemAvailable');
|
||||||
memUsed = memTotal - memAvailable;
|
memBuffers = getVal('Buffers');
|
||||||
|
// SReclaimable est la partie du slab cache récupérable (inclus dans Cached par free)
|
||||||
|
const sReclaimable = getVal('SReclaimable');
|
||||||
|
const shmem = getVal('Shmem');
|
||||||
|
memCached = getVal('Cached') + (sReclaimable > shmem ? sReclaimable - shmem : 0);
|
||||||
|
// RAM utilisée = total - libre - buffers - cache (= RAM applicative réelle)
|
||||||
|
memUsed = memTotal - memFree - memBuffers - memCached;
|
||||||
|
if (memUsed < 0) memUsed = memTotal - memAvailable; // fallback si lxcfs ne fournit pas Buffers/Cached
|
||||||
} catch(e) {}
|
} catch(e) {}
|
||||||
|
|
||||||
// Disque : df sur la racine du conteneur (= hôte car pas de volume overlay)
|
// Disque : df sur la racine du conteneur (= hôte car pas de volume overlay)
|
||||||
|
|
@ -250,6 +259,9 @@ function getServerMetrics() {
|
||||||
used: memUsed,
|
used: memUsed,
|
||||||
free: memFree,
|
free: memFree,
|
||||||
available: memAvailable,
|
available: memAvailable,
|
||||||
|
buffers: memBuffers,
|
||||||
|
cached: memCached,
|
||||||
|
// usagePercent = RAM applicative réelle (hors cache disque, identique à `free`)
|
||||||
usagePercent: Math.round((memUsed / memTotal) * 100)
|
usagePercent: Math.round((memUsed / memTotal) * 100)
|
||||||
},
|
},
|
||||||
disk: {
|
disk: {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue