iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Docker容器内存监控怎么实现
  • 451
分享到

Docker容器内存监控怎么实现

2023-06-19 12:06:24 451人浏览 薄情痞子
摘要

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

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

--结束END--

本文标题: Docker容器内存监控怎么实现

本文链接: https://www.lsjlt.com/news/295994.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Docker容器内存监控怎么实现
    本篇内容主要讲解“Docker容器内存监控怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker容器内存监控怎么实现”吧!linux内存监控要明白docker容器内存是如何计算的,首...
    99+
    2023-06-19
  • 怎么对docker内存进行监控
    怎么对docker内存进行监控?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一直运行的docker容器显示内存已经耗尽,并且容器内存耗尽也没出现重启情况,通过后台查看发现进程没...
    99+
    2023-06-14
  • Docker容器监控方案怎么选
    本篇文章给大家分享的是有关Docker容器监控方案怎么选,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。随着线上服务的全面docker化,对do...
    99+
    2024-04-02
  • Docker容器的自动化监控实现方法
    这篇文章主要讲解了“Docker容器的自动化监控实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker容器的自动化监控实现方法”吧!文章摘要 近年来容器技术不断成熟并得到应用。D...
    99+
    2023-06-19
  • Linux怎么监控内存
    这篇文章主要介绍“Linux怎么监控内存”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux怎么监控内存”文章能帮助大家解决问题。一、安装Linux下面的一个邮件客户端Msmtp软件(类似于一个...
    99+
    2023-06-27
  • docker 内存监控与压测方式
    一直运行的docker容器显示内存已经耗尽,并且容器内存耗尽也没出现重启情况,通过后台查看发现进程没有占用多少内存。内存的监控使用的是cadvisor,计算方式也是使用cadviso...
    99+
    2024-04-02
  • zabbix怎么监控redis内存
    这篇文章主要介绍了zabbix怎么监控redis内存的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇zabbix怎么监控redis内存文章都会有所收获,下面我们一起来看看吧。1、导入模板直接下载,通过下面的步骤导...
    99+
    2023-06-27
  • Docker容器中怎么部署Zabbix监控系统
    本篇文章给大家分享的是有关Docker容器中怎么部署Zabbix监控系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.安装docker。y...
    99+
    2024-04-02
  • Netdata是否支持Docker容器监控
    是的,Netdata支持监控Docker容器。通过安装Netdata的Docker插件,用户可以监控Docker容器的性能指标,包括...
    99+
    2024-04-02
  • 怎么监控docker容器运行状态shell脚本
    这篇文章将为大家详细讲解有关怎么监控docker容器运行状态shell脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。场景公司项目部署在docker中,由于未知原因容器偶尔会停止,需要写一个脚本监控 容...
    99+
    2023-06-14
  • Linux内存监控虚拟内存实现机制及容量设定的示例分析
    这篇文章主要介绍Linux内存监控虚拟内存实现机制及容量设定的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在地址映射中要通过TLB(翻译后援存储器)来寻找物理页;交换机制中也要用到交换缓存,并且把物理页内容...
    99+
    2023-06-16
  • docker修改容器内存大小的实现方式
    目录前言1.docker内存限制的两种方式2.方式一:-m参数限制3.方式二:修改hostconfig.json文件限制1.查找容器对应的hostconfig.json文件2.停止d...
    99+
    2024-04-02
  • 使用zabbix怎么对docker容器状态进行监控
    这篇文章给大家介绍使用zabbix怎么对docker容器状态进行监控,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首选,zabbix_agentd 配置  vim /usr/local/zabbix/etc/...
    99+
    2023-06-07
  • Docker怎么限制容器可用的内存
    小编给大家分享一下Docker怎么限制容器可用的内存,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!为什么要限制容器对内存的使用?限制容器不能过多的使用主机的内存是非常重要的。对于 linux 主机来说,一旦内核检测到没有足...
    99+
    2023-06-07
  • 如何实现JVM内存监控工具用法
    本篇文章为大家展示了如何实现JVM内存监控工具用法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。你对JVM内存监控工具的使用是否熟悉,这里向大家简单介绍一下,VisualVM囊括的命令行工具包括jp...
    99+
    2023-06-17
  • Rancher+Docker+SpringBoot实现微服务部署、扩容、环境监控
    目录前言一、前置需求1.linux虚拟机或系统2.创建好docker环境3.写一个简单的微服务并创建为docker镜像二、安装Rancher1.拉取rancher镜像2.启动ranc...
    99+
    2024-04-02
  • Docker容器监控Cadvisor的介绍及安装
    这篇文章主要介绍“Docker容器监控Cadvisor的介绍及安装”,在日常操作中,相信很多人在Docker容器监控Cadvisor的介绍及安装问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2024-04-02
  • Linux中内存监控vmstat命令怎么用
    这篇文章主要介绍了Linux中内存监控vmstat命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vmstat是Virtual Meomory Statistics(...
    99+
    2023-06-16
  • 怎么利用Shell脚本实现邮件监控Linux系统的内存
    这篇文章给大家介绍怎么利用Shell脚本实现邮件监控Linux系统的内存,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、安装Linux下面的一个邮件客户端Msmtp软件(类似于一个Foxmail的工具)**1、下载安...
    99+
    2023-06-28
  • Python怎么实现监控屏幕界面内容变化并发送通知
    需求有时候需要实时监控屏幕上的信息是否发生变化,例如监控某个公众号是否发送了推送,可能是你重要的一个信息来源渠道,你希望第一时间留意到,抢热点等~那么可以使用Python编写这么一个脚本进行监控屏幕像素变化,只要像素发生变化,基本就是内容发...
    99+
    2023-05-14
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作