当使用docker stats命令查看正在运行的容器时,我可以看到容器的内存使用率为202.3MiB。 但是,当通过REST API查看相同的容器时, GET / containers / container_name / stats-> memory_stats-> usage,那里的使用率显示为242.10 MiB。
这些值之间存在很大差异。 造成差异的原因可能是什么?我知道Docker客户端使用REST API来获取其统计信息,但是我在这里缺少什么?
答案 0 :(得分:2)
解决了我的问题。最初,在计算内存使用量时我没有考虑缓存内存。
说“ stats”是从中返回的json GET / containers / container_name / stats
正确的公式是:
memory_usage = stats["memory_stats"]["usage"] - stats["memory_stats"]["stats"]["cache"]
limit = memory_usage = stats["memory_stats"]["limit"]
memory_utilization = memory_usage/limit * 100
答案 1 :(得分:0)
使用 rss 值,即(rss =使用情况-缓存)
"memory_stats": {
"stats": {
"cache": 477356032,
"rss": 345579520,
},
"usage": 822935552
}
在Linux上,Docker CLI通过从总内存使用量中减去页面缓存使用率来报告内存使用情况。
API不会执行这种计算,而是提供总内存使用量和页面缓存中的内存量,以便客户端可以根据需要使用数据。 (https://docs.docker.com/engine/reference/commandline/stats/)