繁体   English   中英

为什么 Openshift 报告的容器内存使用量远高于本地运行的同一个 Docker 容器?

[英]Why is Openshift reporting a far greater container memory usage than the same Docker container running locally?

我有一个 Docker 容器,它在本地运行时报告此资源使用情况:

docker run -i --rm -p 8080:8080 my-application

如您所见,容器使用 10.6MiB:

docker ps -q | xargs  docker stats --no-stream             
CONTAINER ID        NAME                 CPU %               MEM USAGE / LIMIT    MEM %               NET I/O             BLOCK I/O           PIDS
b73afe5ee771        mystifying_neumann   0.00%               10.6MiB / 7.777GiB   0.13%               11.7kB / 2.38kB     0B / 0B             21

现在我在 Openshift 中运行该容器,设置以下内存限制:

        resources:
          limits:
            memory: 64Mi
          requests:
            memory: 64Mi

当 pod 启动时,我预计总共使用了 11MiB,总共 64MiB。 但是容器使用的是 53MiB !!! 为什么会有这种差异?

在此处输入图片说明

我终于在这两个参考文献中找到了这种差异的原因:

https://github.com/openshift/origin-web-console/issues/1315

https://access.redhat.com/solutions/3639191

总结: Docker 报告内存为添加了几个元素,例如 rss 和缓存:

https://docs.docker.com/config/containers/runmetrics/#metrics-from-cgroups-memory-cpu-block-io

缓存 此控制组的进程使用的内存量,可以与块设备上的块精确关联。 当您读取和写入磁盘上的文件时,此数量会增加。 如果您使用“常规”I/O(打开、读取、写入系统调用)以及映射文件(使用 mmap),就会出现这种情况。 它还说明了 tmpfs 挂载使用的内存,但原因尚不清楚。

rss 与磁盘上的任何内容都不对应的内存量:堆栈、堆和匿名内存映射。

Openshift 3.x 使用 Heapster 读取该信息,但无法区分两种类型的内存。

如果您检查在 Openshift 内运行的容器的 docker stats,您会发现预期的(较低)值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM