千家信息网

Docker容器内存监控怎么实现

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Docker容器内存监控怎么实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Docker容器内存监控怎么实现"吧!linux内存监控要
千家信息网最后更新 2026年11月01日Docker容器内存监控怎么实现

本篇内容主要讲解"Docker容器内存监控怎么实现",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Docker容器内存监控怎么实现"吧!

linux内存监控

要明白docker容器内存是如何计算的,首先要明白linux中内存的相关概念。

使用free命令可以查看当前内存使用情况。

[root@localhost ~]$ free              total       used       free     shared    buffers     cachedMem:     264420684  213853512   50567172   71822688    2095364  175733516-/+ buffers/cache:   36024632  228396052Swap:     16777212    1277964   15499248

这里有几个概念:

  • mem: 物理内存

  • swap: 虚拟内存。即可以把数据存放在硬盘上的数据

  • shared: 共享内存。存在在物理内存中。

  • buffers: 用于存放要输出到disk(块设备)的数据的

  • cached: 存放从disk上读出的数据

为方便说明,我对free的结果做了一个对应。

[root@localhost ~]$ free              total       used       free        shared    buffers   cachedMem:     total_mem   used_mem    free_mem   shared_mem    buffer     cache-/+ buffers/cache:  real_used   real_freeSwap:   total_swap  used_swap   free_swap

一般认为,buffer和cache是还可以再进行利用的内存,所以在计算空闲内存时,会将其剔除。
因此这里有几个等式:

real_used = used_mem - buffer - cachereal_free = free_mem + buffer + cachetotal_mem = used_mem + free_mem

了解了这些,我们再来看free的数据源。其实其数据源是来自于/proc/memeinfo文件。

[root@localhost ~]$ cat /proc/meminfo MemTotal:       264420684 kBMemFree:        50566436 kBBuffers:         2095356 kBCached:         175732644 kBSwapCached:       123688 kBActive:         165515340 kBInactive:       37004224 kBActive(anon):   92066880 kBInactive(anon):  4455076 kBActive(file):   73448460 kBInactive(file): 32549148 kBUnevictable:      362900 kBMlocked:           74696 kBSwapTotal:      16777212 kBSwapFree:       15499248 kBDirty:              2860 kBWriteback:             0 kBAnonPages:      24932928 kBMapped:         58165040 kBShmem:          71822688 kBSlab:            8374496 kBSReclaimable:    8163096 kBSUnreclaim:       211400 kBKernelStack:       45824 kBPageTables:       606296 kBNFS_Unstable:          0 kBBounce:                0 kBWritebackTmp:          0 kBCommitLimit:    148987552 kBCommitted_AS:   114755628 kBVmallocTotal:   34359738367 kBVmallocUsed:      772092 kBVmallocChunk:   34225428328 kBHardwareCorrupted:     0 kBAnonHugePages:  22083584 kBHugePages_Total:       0HugePages_Free:        0HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       2048 kBDirectMap4k:        7168 kBDirectMap2M:     2015232 kBDirectMap1G:    266338304 kB
docker

说完linux的内存,我们再来看下docker的内存监控。docker自身提供了一种内存监控的方式,即可以通过docker stats对容器内存进行监控。
该方式实际是通过对cgroup中相关数据进行取值从而计算得到。

cgroup

cgroup中的memory子系统为hierarchy提供了如下文件。

[root@localhost ~]$ ll /cgroup/memory/docker/53a11f13c08099dd6d21030dd2ddade54d5cdd7ae7e9e68f5ba055ad28498b6f/总用量 0--w--w--w- 1 root root 0 2月  22 12:51 cgroup.event_control-rw-r--r-- 1 root root 0 5月  25 17:07 cgroup.procs-rw-r--r-- 1 root root 0 2月  22 12:51 memory.failcnt--w------- 1 root root 0 2月  22 12:51 memory.force_empty-rw-r--r-- 1 root root 0 3月  30 17:06 memory.limit_in_bytes-rw-r--r-- 1 root root 0 2月  22 12:51 memory.max_usage_in_bytes-rw-r--r-- 1 root root 0 2月  22 12:51 memory.memsw.failcnt-rw-r--r-- 1 root root 0 3月  30 17:06 memory.memsw.limit_in_bytes-rw-r--r-- 1 root root 0 2月  22 12:51 memory.memsw.max_usage_in_bytes-r--r--r-- 1 root root 0 2月  22 12:51 memory.memsw.usage_in_bytes-rw-r--r-- 1 root root 0 2月  22 12:51 memory.move_charge_at_immigrate-rw-r--r-- 1 root root 0 2月  22 12:51 memory.oom_control-rw-r--r-- 1 root root 0 3月  30 17:06 memory.soft_limit_in_bytes-r--r--r-- 1 root root 0 2月  22 12:51 memory.stat-rw-r--r-- 1 root root 0 2月  22 12:51 memory.swappiness-r--r--r-- 1 root root 0 2月  22 12:51 memory.usage_in_bytes-rw-r--r-- 1 root root 0 2月  22 12:51 memory.use_hierarchy-rw-r--r-- 1 root root 0 2月  22 12:51 notify_on_release-rw-r--r-- 1 root root 0 2月  22 12:51 tasks

这些文件的具体含义可以查看相关资料cgroup memory。
这里主要介绍几个与docker监控相关的。

[root@localhost 53a11f13c08099dd6d21030dd2ddade54d5cdd7ae7e9e68f5ba055ad28498b6f]$ cat memory.usage_in_bytes 135021858816[root@localhost 53a11f13c08099dd6d21030dd2ddade54d5cdd7ae7e9e68f5ba055ad28498b6f]$ cat memory.memsw.usage_in_bytes 135679291392[root@localhost 53a11f13c08099dd6d21030dd2ddade54d5cdd7ae7e9e68f5ba055ad28498b6f]$ cat memory.stat cache 134325506048rss 695980032mapped_file 16155119616pgpgin 21654116032pgpgout 21705492352swap 655171584inactive_anon 4218880active_anon 74202603520inactive_file 8365199360active_file 52449439744unevictable 0hierarchical_memory_limit 137438953472hierarchical_memsw_limit 274877906944total_cache 134325506048total_rss 695980032total_mapped_file 16155119616total_pgpgin 21654116032total_pgpgout 21705492352total_swap 655171584total_inactive_anon 4218880total_active_anon 74202603520total_inactive_file 8365199360total_active_file 52449439744total_unevictable 0
memory.stat

memory.stat包含有最丰富的

active_anon + inactive_anon = anonymous memory + file cache for tmpfs + swap cache

active_file + inactive_file = cache - size of tmpfs

docker原生内存监控

再来说到docker原生的docker stats。其具体实现在libcontainer中可以看到。其将容器的内存监控分为cache,usage,swap usage,kernel usage,kernel tcp usage。

其中cache是从memory.stat中的cache中获取。

usage是使用memory.usage_in_bytes和memory.limit_in_bytes进行相除来计算使用率。这一方式有一个弊端,就是不够细化,没有区分出cache部分,不能真正反映内存使用率。因为一般来说cache是可以复用的内存部分,因此一般将其计入到可使用的部分。

可以考虑的改进计算方式

改进方式在统计内存使用量时将cache计算排除出去。类似于linux中计算real_used时将buffer和cache排除一样。

cache并不能直接应用memory.stat中的cache,因为其中包括了tmpfs,而tmpfs算是实际使用的内存部分。

tmpfs即share memory,共享内存

因为在memory.stat中存在有

active_file + inactive_file = cache - size of tmpfs

因此可以计算实际使用的内存量为

real_used = memory.usage_in_bytes - (rss + active_file + inactive_file)

到此,相信大家对"Docker容器内存监控怎么实现"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内存 监控 数据 容器 方式 实际 部分 文件 使用率 内容 数据源 概念 物理 学习 实用 更深 一般来说 不够 使用量 兴趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司排名 互联网科技垄断 互联网最新的科技有限公司 互联网与科技金融数据 北京互联网科技 高科技与互联网 未来的互联网科技 互联网科技小额贷款 济南华为互联网科技产业总部基地 中国互联网有什么科技含量 贵州叶脉互联网科技有限公司所属行业 全球顶尖互联网科技公司 互联网对科技的发展 哈尔滨屹滨互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 35岁以上互联网科技行业 互联网科技包装股 广州三三互联网科技有限公司 科技互联网专业工作会议发言稿 互联网大会出现的黑科技 重生之互联网科技帝国 科技创新与互联网经济 互联网科技的发展 互联网科技有限公司 翻译 成都铂石互联网科技做什么的 迪庆互联网科技招生 烟台灵鸽互联网科技有限公司 张家口科技产业互联网平台 银川新华互联网科技学校招聘 现代科技的标志之一的互联网
0