docker stats 输出与 top 输出有何关系?

docker stats 输出与 top 输出有何关系?

我在 Linux 上的 Docker 容器中运行一个进程,其内存限制为 2GByte。(该容器以 启动docker run --memory=2g。)

这是top运行一段时间后的结果。

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 9016 root      20   0 7342132 4.652g 4.224g S 100.0  7.4  18828:28 blah

以下是 的输出docker stats

CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
d7032e5928b6        100.02%             2.076 GB/2.147 GB   96.68%              345 MB/199.1 MB

然后,重新启动后top

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5653 root      20   0 2787800 1.328g 1.030g S 100.0  2.1   0:37.57 blah

docker stats

CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
10cefdce241f        99.97%              320.4 MB/2.147 GB   14.92%              36.34 kB/22.48 kB

RES因此,这与-非常粗略地匹配SHR,这对我来说有些道理 - 但是对于长期运行的容器的输出的等效计算并不以相同的方式匹配。

topDocker 在这里到底在计算什么?我能以某种方式将其与 或其他工具的输出进行匹配吗 ?

答案1

docker stats 还包括文件缓存内存。它将根据请求释放,但会被视为已使用。

答案2

Docker 统计数据报告容器 cgroup 中的内存和 CPU 使用情况。这将与一些顶级统计数据相关联,但并不完全相同,因为进程中的内存包括共享内存、映射到文件系统对象的内存等。cgroup 将汇总该容器内所有进程的使用情况。要查看容器内的 cgroup 使用情况,您可以查看以下文件/sys/fs/cgroup/memory/

$ docker run -it --rm --name memtest -m 2g busybox /bin/sh
/ # cat /sys/fs/cgroup/memory/memory.usage_in_bytes
1519616
/ # cat /sys/fs/cgroup/memory/memory.limit_in_bytes
2147483648

相关内容