• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >虚拟化 > Docker 容器内存监控原理及应用

Docker 容器内存监控原理及应用

作者:XuXinkun 字体:[增加 减小] 来源:互联网

本文主要包含Docker,容器内存监控,Docker,容器内存监控详解,Docker,内存监控等服务器相关知识,XuXinkun 希望可以进行参考

Docker 容器内存监控

linux内存监控

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

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

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

这里有几个概念:

  1. mem: 物理内存
  2. swap: 虚拟内存。即可以把数据存放在硬盘上的数据
  3. shared: 共享内存。存在在物理内存中。
  4. buffers: 用于存放要输出到disk(块设备)的数据的
  5. cached: 存放从disk上读出的数据

可以参考这里。

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

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

名称 说明
total_mem 物理内存总量
used_mem 已使用的物理内存量
free_mem 空闲的物理内存量
shared_mem 共享内存量
buffer buffer所占内存量
cache cache所占内存量
real_used 实际使用的内存量
real_free 实际空闲的内存量
total_swap swap总量
used_swap 已使用的swap
free_swap 空闲的swap

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

real_used = used_mem - buffer - cache
real_free = free_mem + buffer + cache
total_mem = used_mem + free_mem

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

[root@localhost ~]$ cat /proc/meminfo 
MemTotal:    264420684 kB
MemFree:    50566436 kB
Buffers:     2095356 kB
Cached:     175732644 kB
SwapCached:    123688 kB
Active:     165515340 kB
Inactive:    37004224 kB
Active(anon):  92066880 kB
Inactive(anon): 4455076 kB
Active(file):  73448460 kB
Inactive(file): 32549148 kB
Unevictable:   362900 kB
Mlocked:      74696 kB
SwapTotal:   16777212 kB
SwapFree:    15499248 kB
Dirty:       2860 kB
Writeback:       0 kB
AnonPages:   24932928 kB
Mapped:     58165040 kB
Shmem:     71822688 kB
Slab:      8374496 kB
SReclaimable:  8163096 kB
SUnreclaim:    211400 kB
KernelStack:    45824 kB
PageTables:    606296 kB
NFS_Unstable:     0 kB
Bounce:        0 kB
WritebackTmp:     0 kB
CommitLimit:  148987552 kB
Committed_AS:  114755628 kB
VmallocTotal:  34359738367 kB
VmallocUsed:   772092 kB
VmallocChunk:  34225428328 kB
HardwareCorrupted:   0 kB
AnonHugePages: 22083584 kB
HugePages_Total:    0
HugePages_Free:    0
HugePages_Rsvd:    0
HugePages_Surp:    0
Hugepagesize:    2048 kB
DirectMap4k:    7168 kB
DirectMap2M:   2015232 kB
DirectMap1G:  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监控相关的。

文件名 说明
memory.usage_in_bytes 已使用的内存量(包含cache和buffer)(字节),相当于linux的used_meme
memory.limit_in_bytes 限制的内存总量(字节),相当于linux的total_mem
memory.failcnt 申请内存失败次数计数
memory.memsw.usage_in_bytes 已使用的内存和swap(字节)
memory.memsw.limit_in_bytes 限制的内存和swap容量(字节)
memory.memsw.failcnt 申请内存和swap失败次数计数
memory.stat 内存相关状态

以下为一个容器的样例。

[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 134325506048
rss 695980032
mapped_file 16155119616
pgpgin 21654116032
pgpgout 21705492352
swap 655171584
inactive_anon 4218880
active_anon 74202603520
inactive_file 8365199360
active_file 52449439744
unevictable 0
hierarchical_memory_limit 137438953472
hierarchical_memsw_limit 274877906944
total_cache 134325506048
total_rss 695980032
total_mapped_file 16155119616
total_pgpgin 21654116032
total_pgpgout 21705492352
total_swap 655171584
total_inactive_anon 4218880
total_active_anon 74202603520
total_inactive_file 8365199360
total_active_file 52449439744
total_unevictable 0

memory.stat

memory.stat包含有最丰富的

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Docker实践8:Compose,docker实践compose
  • Docker buildx构建多平台镜像并推送到私有仓库的方法
  • Docker三个基本概念镜像(Image)容器(Container)仓库(Repository)
  • 什么是Docker?为什么要使用Docker
  • docker 开源的应用容器引擎
  • 如何给docker设置http代理
  • docker官方mysql镜像自定义配置详解
  • 详解Docker数据管理(数据卷&数据卷容器)
  • 如何利用Docker容器实现代理转发与数据备份详解
  • 详解Docker Swarm 在持续集成测试中的应用

相关文章

  • Dockerfile中CMD和ENTRYPOINT命令详解
  • Ubuntu VMware出现提示No 3D support is available的解决方法
  • VMware下ubuntu扩展磁盘空间的方法
  • CentOS 一键安装Openstack详细介绍
  • centos7搭建docker私人仓库的方法(kubernetes)
  • ubuntu14.04+docker的安装及使用
  • Docker-compose的安装和设定详细步骤
  • 使用Docker安装phabricator的配置和使用方法
  • docker指令收集整理(收藏)
  • VirtualBox安装Archlinux并配置桌面环境

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • 浅谈docker Dockerfile 指令 VOLUME 介绍
    • Docker容器自启动的实现方法
    • 服务器虚拟化基础设施:2014年争夺战
    • Docker容器中运行nginx
    • OpenStack Ceilometer用MongoDB解决占用磁盘空间过大问题
    • Docke实例之搭建gitlab的方法
    • 整合存储 2013服务器虚拟化9大预测
    • 在Ubuntu15.04上安装Docker的步骤以及基本用法
    • 详解docker搭建redis集群的环境搭建
    • Docker实现分布式应用功能教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有

统计 描述
cache 页缓存,包括 tmpfs(shmem),单位为字节
rss 匿名和 swap 缓存,不包括 tmpfs(shmem),单位为字节
mapped_file memory-mapped 映射的文件大小,包括 tmpfs(shmem),单位为字节
pgpgin 存入内存中的页数
pgpgout 从内存中读出的页数