docker stats 命令和 docker rest api 内存统计之间不一致

inconsistency between docker stats command and docker rest api memory stats

使用 docker stats 命令查看 运行 容器时,我可以看到容器的内存使用量为 202.3MiB。 但是,当通过 REST API 查看同一个容器时 GET /containers/container_name/stats -> memory_stats-> usage ,那里的 usage 显示 242.10 MiB.

这些值之间存在很大差异。 造成差异的原因可能是什么?我知道 docker 客户端使用 REST API 来获取其统计信息,但我在这里缺少什么?

解决了我的问题。最初,我在计算内存使用时没有考虑缓存内存。

说“stats”是从 json 返回的 获取 /containers/container_name/stats,

正确的公式是:

memory_usage = stats["memory_stats"]["usage"] - stats["memory_stats"]["stats"]["cache"]

limit = stats["memory_stats"]["limit"]

memory_utilization = memory_usage/limit * 100

使用 rss 值,即(rss = 用法 - 缓存)

"memory_stats": {
        "stats": {
            "cache": 477356032,
            "rss": 345579520,
        },
        "usage": 822935552 
}

在 Linux,Docker CLI 通过从总内存使用量中减去页面缓存使用量来报告内存使用量。

API 不执行此类计算,而是提供总内存使用量和页面缓存的数量,以便客户端可以根据需要使用数据。 (https://docs.docker.com/engine/reference/commandline/stats/)