varaverk: Docker memory — use docker stats sum instead of raw cgroup (matches Unraid dashboard)

This commit is contained in:
Gmer4Lfe
2026-05-24 11:41:59 -04:00
parent 9e236e3f52
commit 6bb44cae8b
@@ -124,23 +124,18 @@ function vv_memory_breakdown(): array {
if (preg_match('/^size\s+\d+\s+(\d+)/', $line, $m)) { $arcKb = (int)($m[1] / 1024); break; } if (preg_match('/^size\s+\d+\s+(\d+)/', $line, $m)) { $arcKb = (int)($m[1] / 1024); break; }
} }
// Docker — try paths in order: Unraid cgv2, systemd cgv2 scopes, cgv1 // Docker — sum docker stats used memory per container (matches Unraid dashboard)
$dockerKb = 0; $dockerKb = 0;
$cgCandidates = [ $dsOut = shell_exec("docker stats --no-stream --format '{{.MemUsage}}' 2>/dev/null") ?: '';
'/sys/fs/cgroup/docker/memory.current', foreach (explode("\n", trim($dsOut)) as $line) {
'/sys/fs/cgroup/memory/docker/memory.usage_in_bytes', if (!preg_match('/^([0-9.]+)(GiB|MiB|KiB|B)\s*\//', trim($line), $m)) continue;
]; $val = (float)$m[1];
foreach ($cgCandidates as $path) { $dockerKb += match($m[2]) {
if (file_exists($path)) { 'GiB' => (int)($val * 1048576),
$dockerKb = (int)((float)@file_get_contents($path) / 1024); 'MiB' => (int)($val * 1024),
break; 'KiB' => (int)$val,
} default => (int)($val / 1024),
} };
if ($dockerKb === 0) {
foreach (glob('/sys/fs/cgroup/system.slice/docker-*.scope/memory.current') ?: [] as $f) {
$v = @file_get_contents($f);
if ($v !== false) $dockerKb += (int)((float)$v / 1024);
}
} }
// VM (QEMU/KVM RSS) // VM (QEMU/KVM RSS)