From 6957fb08f4233d4fafc06eb9eab6260a1bca28cf Mon Sep 17 00:00:00 2001 From: cobrul Date: Wed, 24 Mar 2021 09:02:42 +0200 Subject: [PATCH] modified how memory usage is calculated on linux, to match the output from docker stats command --- ContainerTracker.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/ContainerTracker.cs b/ContainerTracker.cs index f109675..326e640 100644 --- a/ContainerTracker.cs +++ b/ContainerTracker.cs @@ -164,7 +164,22 @@ private void UpdateResourceMetrics(ContainerTrackerResourceMetrics metrics, Cont } else { - metrics.MemoryUsage.Set(resources.MemoryStats.Usage); + // the value shown in docker stats substracts cached files from memory usage on linux, do the same here + // see https://github.com/docker/cli/blob/d3c36a2a738ae14c8edc2af12b45917e206b58e7/cli/command/container/stats_helpers.go#L239 + var usage = resources.MemoryStats.Usage; + ulong cached_files = 0; + if (resources.MemoryStats.Stats.TryGetValue("total_inactive_file", out var tmp)) + { + cached_files = tmp; + } + else if (resources.MemoryStats.Stats.TryGetValue("total_inactive_file", out tmp)) + { + cached_files = tmp; + } + if (cached_files < usage) + usage -= cached_files; + + metrics.MemoryUsage.Set(usage); } // Network I/O