中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker容器內存監控怎么實現

發布時間:2021-12-13 14:01:43 來源:億速云 閱讀:316 作者:iii 欄目:大數據

本篇內容主要講解“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容器內存監控怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石狮市| 通海县| 柞水县| 平舆县| 孟连| 太仓市| 建平县| 栖霞市| 九龙县| 吉林省| 黑水县| 上蔡县| 沈丘县| 东城区| 德保县| 铁岭市| 芦山县| 神农架林区| 瓦房店市| 汉中市| 东港市| 天柱县| 阿鲁科尔沁旗| 读书| 屯门区| 平陆县| 建宁县| 株洲县| 宁乡县| 广饶县| 都昌县| 旺苍县| 湘阴县| 旌德县| 扬中市| 安阳市| 佛学| 西平县| 常熟市| 滦平县| 鹿泉市|