Open JeanRessouche opened 1 year ago
Did you compare your results against the Docker docs?
To calculate the values shown by the stats command of the docker cli tool the following formulas can be used:
- used_memory =
memory_stats.usage - memory_stats.stats.cache
- available_memory =
memory_stats.limit
- Memory usage % =
(used_memory / available_memory) * 100.0
- cpu_delta =
cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage
- system_cpu_delta =
cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage
- number_cpus =
lenght(cpu_stats.cpu_usage.percpu_usage) or cpu_stats.online_cpus
- CPU usage % =
(cpu_delta / system_cpu_delta) * number_cpus * 100.0
In case it helps, my implementation is like this:
await client.Containers.GetContainerStatsAsync(containerid,
new ContainerStatsParameters() { Stream = false },
new Progress<ContainerStatsResponse>(m =>
{
ulong used_memory = 0;
if(m.MemoryStats.Stats.TryGetValue("cache", out ulong memusedstatscache))
used_memory = m.MemoryStats.Usage - memusedstatscache;
else
used_memory = m.MemoryStats.Usage;
var available_memory = m.MemoryStats.Limit;
var memory_usage_perc = ((double)used_memory / (double)available_memory) * 100.0f;
var cpu_delta = m.CPUStats.CPUUsage.TotalUsage - m.PreCPUStats.CPUUsage.TotalUsage;
var system_cpu_delta = m.CPUStats.SystemUsage - m.PreCPUStats.SystemUsage;
var number_cpus = m.CPUStats.OnlineCPUs;
var cpu_usage_perc = ((double)cpu_delta / (double)system_cpu_delta) * number_cpus *100.0f;
}),
token);
Thank you i'm gonne try it
Hi, using
GetContainerStatsAsync
and in the progress responseMemoryStats.Usage
i doesn't end with a value approaching what is seen by docker stats.Should i remove from this the total_cache value and something else ?