国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 服務(wù)器 > Web服務(wù)器 > 正文

Docker 容器內(nèi)存監(jiān)控原理及應(yīng)用

2024-09-01 13:48:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Docker 容器內(nèi)存監(jiān)控

linux內(nèi)存監(jiān)控

要明白docker容器內(nèi)存是如何計(jì)算的,首先要明白linux中內(nèi)存的相關(guān)概念。

使用free命令可以查看當(dāng)前內(nèi)存使用情況。

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

這里有幾個(gè)概念:

  1. mem: 物理內(nèi)存
  2. swap: 虛擬內(nèi)存。即可以把數(shù)據(jù)存放在硬盤(pán)上的數(shù)據(jù)
  3. shared: 共享內(nèi)存。存在在物理內(nèi)存中。
  4. buffers: 用于存放要輸出到disk(塊設(shè)備)的數(shù)據(jù)的
  5. cached: 存放從disk上讀出的數(shù)據(jù)

可以參考這里。

為方便說(shuō)明,我對(duì)free的結(jié)果做了一個(gè)對(duì)應(yīng)。

[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

 

名稱(chēng) 說(shuō)明
total_mem 物理內(nèi)存總量
used_mem 已使用的物理內(nèi)存量
free_mem 空閑的物理內(nèi)存量
shared_mem 共享內(nèi)存量
buffer buffer所占內(nèi)存量
cache cache所占內(nèi)存量
real_used 實(shí)際使用的內(nèi)存量
real_free 實(shí)際空閑的內(nèi)存量
total_swap swap總量
used_swap 已使用的swap
free_swap 空閑的swap

 

一般認(rèn)為,buffer和cache是還可以再進(jìn)行利用的內(nèi)存,所以在計(jì)算空閑內(nèi)存時(shí),會(huì)將其剔除。
因此這里有幾個(gè)等式:

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

了解了這些,我們?cè)賮?lái)看free的數(shù)據(jù)源。其實(shí)其數(shù)據(jù)源是來(lái)自于/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

說(shuō)完linux的內(nèi)存,我們?cè)賮?lái)看下docker的內(nèi)存監(jiān)控。docker自身提供了一種內(nèi)存監(jiān)控的方式,即可以通過(guò)docker stats對(duì)容器內(nèi)存進(jìn)行監(jiān)控。

該方式實(shí)際是通過(guò)對(duì)cgroup中相關(guān)數(shù)據(jù)進(jìn)行取值從而計(jì)算得到。

cgroup

cgroup中的memory子系統(tǒng)為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

這些文件的具體含義可以查看相關(guān)資料cgroup memory。

這里主要介紹幾個(gè)與docker監(jiān)控相關(guān)的。

 

文件名 說(shuō)明
memory.usage_in_bytes 已使用的內(nèi)存量(包含cache和buffer)(字節(jié)),相當(dāng)于linux的used_meme
memory.limit_in_bytes 限制的內(nèi)存總量(字節(jié)),相當(dāng)于linux的total_mem
memory.failcnt 申請(qǐng)內(nèi)存失敗次數(shù)計(jì)數(shù)
memory.memsw.usage_in_bytes 已使用的內(nèi)存和swap(字節(jié))
memory.memsw.limit_in_bytes 限制的內(nèi)存和swap容量(字節(jié))
memory.memsw.failcnt 申請(qǐng)內(nèi)存和swap失敗次數(shù)計(jì)數(shù)
memory.stat 內(nèi)存相關(guān)狀態(tài)

 

以下為一個(gè)容器的樣例。

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

 

統(tǒng)計(jì) 描述
cache 頁(yè)緩存,包括 tmpfs(shmem),單位為字節(jié)
rss 匿名和 swap 緩存,不包括 tmpfs(shmem),單位為字節(jié)
mapped_file memory-mapped 映射的文件大小,包括 tmpfs(shmem),單位為字節(jié)
pgpgin 存入內(nèi)存中的頁(yè)數(shù)
pgpgout 從內(nèi)存中讀出的頁(yè)數(shù)
swap swap 用量,單位為字節(jié)
active_anon 在活躍的最近最少使用(least-recently-used,LRU)列表中的匿名和 swap 緩存,包括 tmpfs(shmem),單位為字節(jié)
inactive_anon 不活躍的 LRU 列表中的匿名和 swap 緩存,包括 tmpfs(shmem),單位為字節(jié)
active_file 活躍 LRU 列表中的 file-backed 內(nèi)存,以字節(jié)為單位
inactive_file 不活躍 LRU 列表中的 file-backed 內(nèi)存,以字節(jié)為單位
unevictable 無(wú)法再生的內(nèi)存,以字節(jié)為單位
hierarchical_memory_limit 包含 memory cgroup 的層級(jí)的內(nèi)存限制,單位為字節(jié)
hierarchical_memsw_limit 包含 memory cgroup 的層級(jí)的內(nèi)存加 swap 限制,單位為字節(jié)

 

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

active_file + inactive_file = cache - size of tmpfs

docker原生內(nèi)存監(jiān)控

再來(lái)說(shuō)到docker原生的docker stats。其具體實(shí)現(xiàn)在libcontainer中可以看到。其將容器的內(nèi)存監(jiān)控分為cache,usage,swap usage,kernel usage,kernel tcp usage。

其中cache是從memory.stat中的cache中獲取。

usage是使用memory.usage_in_bytes和memory.limit_in_bytes進(jìn)行相除來(lái)計(jì)算使用率。這一方式有一個(gè)弊端,就是不夠細(xì)化,沒(méi)有區(qū)分出cache部分,不能真正反映內(nèi)存使用率。因?yàn)橐话銇?lái)說(shuō)cache是可以復(fù)用的內(nèi)存部分,因此一般將其計(jì)入到可使用的部分。

可以考慮的改進(jìn)計(jì)算方式

改進(jìn)方式在統(tǒng)計(jì)內(nèi)存使用量時(shí)將cache計(jì)算排除出去。類(lèi)似于linux中計(jì)算real_used時(shí)將buffer和cache排除一樣。

cache并不能直接應(yīng)用memory.stat中的cache,因?yàn)槠渲邪藅mpfs,而tmpfs算是實(shí)際使用的內(nèi)存部分。

tmpfs即share memory,共享內(nèi)存

因?yàn)樵趍emory.stat中存在有

active_file + inactive_file = cache - size of tmpfs

因此可以計(jì)算實(shí)際使用的內(nèi)存量為

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

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘泉县| 鸡西市| 腾冲县| 阿合奇县| 扎鲁特旗| 昌邑市| 赣榆县| 乌兰察布市| 元阳县| 卫辉市| 涞水县| 石首市| 德钦县| 临城县| 阜宁县| 剑阁县| 历史| 广宗县| 中超| 察雅县| 当雄县| 从化市| 蚌埠市| 滦平县| 西和县| 岱山县| 五寨县| 宁南县| 绍兴市| 含山县| 雷波县| 徐水县| 漳州市| 孝昌县| 丰宁| 安龙县| 博客| 陆良县| 武城县| 武宣县| 凤阳县|