[英]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.