diff --git a/src/backend/src/docker.js b/src/backend/src/docker.js index 3d93707..2a761c6 100644 --- a/src/backend/src/docker.js +++ b/src/backend/src/docker.js @@ -199,19 +199,28 @@ function getServerMetrics() { cpuUsage = dTotal > 0 ? Math.round((1 - dIdle / dTotal) * 100) : 0; } 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 memFree = 0, memAvailable = 0, memUsed = 0; + let memFree = 0, memAvailable = 0, memUsed = 0, memBuffers = 0, memCached = 0; try { const meminfo = fs.readFileSync('/proc/meminfo', 'utf8'); 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; }; memTotal = getVal('MemTotal'); memFree = getVal('MemFree'); 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) {} // Disque : df sur la racine du conteneur (= hôte car pas de volume overlay) @@ -250,6 +259,9 @@ function getServerMetrics() { used: memUsed, free: memFree, available: memAvailable, + buffers: memBuffers, + cached: memCached, + // usagePercent = RAM applicative réelle (hors cache disque, identique à `free`) usagePercent: Math.round((memUsed / memTotal) * 100) }, disk: {