商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > 容器内存占用之系统cache介绍

容器内存占用之系统cache介绍

  发布于2026-05-31 阅读(0)

扫一扫,手机访问

缘起

监控上看到容器内存已经撑爆了,但进去一查,进程列表里根本找不到哪个进程在吃内存。用 awk 把容器所有进程的 RSS 加起来,算出来的值离内存上限还差一大截。这到底是怎么回事?

分析

第一个念头:难道是 docker stats 算错了?

/sys/fs/cgroup/memory/docker/xxxxx/memory.usage,数值和监控一致——计算没错。那就得往另一个方向想了:系统内存里有一部分会被 buffer 和 cache 占掉,Linux 内核把这部分也算在“已使用”里。对容器来说,会不会也出现同样的“误会”?而且很可能某个容器触发的文件缓存(cache)被算到了它自己的头上。

验证方法很简单:进容器里 dd 一个大文件看看。果然,dd 之后 docker stats 显示的已用内存立刻飙升。再回到宿主机执行 echo 3 > /proc/sys/vm/drop_caches,容器监控的已用内存又降回去了。原因浮出水面。

问题

对于宿主机,计算内存占用时可以拿“已用内存”减去 cache/buffer 来得到真实使用量。那容器呢?如果不减去它自己引发的 cache/buffer,就会导致误报警。实际测试发现:dd 产生的文件缓存占用的内存,会被计入 inactive_file 这个指标里。这意味着,监控报警规则里如果只盯着总内存,很可能就被 cache 部分骗了。

本文转载于:https://www.jb51.net/os/other/546712.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注