文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Docker容器内存监控怎么实现

2023-06-19 12:08

关注

本篇内容主要讲解“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

这里有几个概念:

为方便说明,我对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

Docker容器内存监控怎么实现

一般认为,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监控相关的。

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包含有最丰富的

Docker容器内存监控怎么实现

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容器内存监控怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯