亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

Docker如何限制容器可用的內存

2024-09-01 13:53:31
字體:
來源:轉載
供稿:網友

默認情況下容器使用的資源是不受限制的。也就是可以使用主機內核調度器所允許的最大資源。但是在容器的使用過程中,經常需要對容器可以使用的主機資源進行限制,本文介紹如何限制容器可以使用的主機內存。

為什么要限制容器對內存的使用?

限制容器不能過多的使用主機的內存是非常重要的。對于 linux 主機來說,一旦內核檢測到沒有足夠的內存可以分配,就會扔出 OOME(Out Of Memmory Exception),并開始殺死一些進程用于釋放內存空間。糟糕的是任何進程都可能成為內核獵殺的對象,包括 docker daemon 和其它一些重要的程序。更危險的是如果某個支持系統運行的重要進程被干掉了,整個系統也就宕掉了!這里我們考慮一個比較常見的場景,大量的容器把主機的內存消耗殆盡,OOME 被觸發后系統內核立即開始殺進程釋放內存。如果內核殺死的第一個進程就是 docker daemon 會怎么樣?結果是所有的容器都不工作了,這是不能接受的!

針對這個問題,docker 嘗試通過調整 docker daemon 的 OOM 優先級來進行緩解。內核在選擇要殺死的進程時會對所有的進程打分,直接殺死得分最高的進程,接著是下一個。當 docker daemon 的 OOM 優先級被降低后(注意容器進程的 OOM 優先級并沒有被調整),docker daemon 進程的得分不僅會低于容器進程的得分,還會低于其它一些進程的得分。這樣 docker daemon 進程就安全多了。

我們可以通過下面的腳本直觀的看一下當前系統中所有進程的得分情況:

#!/bin/bashfor proc in $(find /proc -maxdepth 1 -regex '/proc/[0-9]+'); do printf "%2d %5d %s/n" /  "$(cat $proc/oom_score)" /  "$(basename $proc)" /  "$(cat $proc/cmdline | tr '/0' ' ' | head -c 50)"done 2>/dev/null | sort -nr | head -n 40

此腳本輸出得分最高的 40 個進程,并進行了排序:

docker限制容器內存,docker,容器內存

第一列顯示進程的得分,mysqld 排到的第一名。顯示為 node server.js 的都是容器進程,排名普遍比較靠前。紅框中的是 docker daemon 進程,非常的靠后,都排到了 sshd 的后面。

有了上面的機制后是否就可以高枕無憂了呢!不是的,docker 的官方文檔中一直強調這只是一種緩解的方案,并且為我們提供了一些降低風險的建議:

  • 通過測試掌握應用對內存的需求
  • 保證運行容器的主機有重組的內存
  • 限制容器可以使用的內存
  • 為主機配置 swap

好了,啰嗦了這么多,其實就是說:通過限制容器使用的內存上限,可以降低主機內存耗盡時帶來的各種風險。

壓力測試工具 stress

為了測試容器的內存使用情況,筆者在 ubuntu 的鏡像中安裝了壓力測試工作 stress,并新創建了鏡像 u-stress。本文演示用的所有容器都會通過 u-stress 鏡像創建(本文運行容器的宿主機為 CentOS7)。下面是創建 u-stress 鏡像的 Dockerfile:

FROM ubuntu:latestRUN apt-get update && /  apt-get install stress

創建鏡像的命令為:

$ docker build -t u-stress:latest .

限制內存使用上限

在進入繁瑣的設置細節之前我們先完成一個簡單的用例:限制容器可以使用的最大內存為 300M。
-m(--memory=) 選項可以完成這樣的配置:

$ docker run -it -m 300M --memory-swap -1 --name con1 u-stress /bin/bash

下面的 stress 命令會創建一個進程并通過 malloc 函數分配內存:

# stress --vm 1 --vm-bytes 500M

通過 docker stats 命令查看實際情況:

docker限制容器內存,docker,容器內存

上面的 docker run 命令中通過 -m 選項限制容器使用的內存上限為 300M。同時設置 memory-swap 值為 -1,它表示容器程序使用內存的受限,而可以使用的 swap 空間使用不受限制(宿主機有多少 swap 容器就可以使用多少)。
下面我們通過 top 命令來查看 stress 進程內存的實際情況:

docker限制容器內存,docker,容器內存

上面的截圖中先通過 pgrep 命令查詢 stress 命令相關的進程,進程號比較大的那個是用來消耗內存的進程,我們就查看它的內存信息。VIRT 是進程虛擬內存的大小,所以它應該是 500M。RES 為實際分配的物理內存數量,我們看到這個值就在 300M 上下浮動。看樣子我們已經成功的限制了容器能夠使用的物理內存數量。

限制可用的 swap 大小

強調一下 --memory-swap 是必須要與 --memory 一起使用的。

正常情況下, --memory-swap 的值包含容器可用內存和可用 swap。所以 --memory="300m" --memory-swap="1g" 的含義為:

容器可以使用 300M 的物理內存,并且可以使用 700M(1G -330M) 的 swap。--memory-swap 居然是容器可以使用的物理內存和可以使用的 swap 之和!

把 --memory-swap 設置為 0 和不設置是一樣的,此時如果設置了 --memory,容器可以使用的 swap 大小為 --memory 值的兩倍。

如果 --memory-swap 的值和 --memory 相同,則容器不能使用 swap。下面的 demo 演示了在沒有 swap 可用的情況下向系統申請大量內存的場景:

$ docker run -it --rm -m 300M --memory-swap=300M u-stress /bin/bash# stress --vm 1 --vm-bytes 500M

docker限制容器內存,docker,容器內存

demo 中容器的物理內存被限制在 300M,但是進程卻希望申請到 500M 的物理內存。在沒有 swap 可用的情況下,進程直接被 OOM kill 了。如果有足夠的 swap,程序至少還可以正常的運行。

我們可以通過 --oom-kill-disable 選項強行阻止 OOM kill 的發生,但是筆者認為 OOM kill 是一種健康的行為,為什么要阻止它呢?

除了限制可用 swap 的大小,還可以設置容器使用 swap 的緊迫程度,這一點和主機的 swappiness 是一樣的。容器默認會繼承主機的 swappiness,如果要顯式的為容器設置 swappiness 值,可以使用 --memory-swappiness 選項。

總結

通過限制容器可用的物理內存,可以避免容器內服務異常導致大量消耗主機內存的情況(此時讓容器重啟是較好的策略),因此可以降低主機內存被耗盡帶來的風險。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品短视频| 在线精品国产成人综合| 欧美激情第6页| 日韩综合视频在线观看| 69久久夜色精品国产7777| 欧美在线激情网| 原创国产精品91| 欧美成人自拍视频| 久久久久久久久久久网站| 日韩二区三区在线| 奇米4444一区二区三区| 一区二区在线视频播放| 欲色天天网综合久久| 91精品国产自产在线| 国产精品三级在线| 日韩亚洲国产中文字幕| 一区二区三区回区在观看免费视频| 性欧美亚洲xxxx乳在线观看| 人九九综合九九宗合| 成人乱人伦精品视频在线观看| 欧美日韩一区二区在线| 欧美在线影院在线视频| 国产精品久久久久aaaa九色| 欧美人与性动交| 亚洲精品电影在线观看| 亚洲男人av电影| 最近免费中文字幕视频2019| 日韩电影免费在线观看| 黑人极品videos精品欧美裸| 日韩少妇与小伙激情| 91社影院在线观看| 97在线看免费观看视频在线观看| 国产精品999999| 久久男人的天堂| 免费97视频在线精品国自产拍| 成人久久一区二区三区| 综合欧美国产视频二区| 亚洲在线一区二区| 国产色婷婷国产综合在线理论片a| 国产精品高清在线观看| 97成人精品视频在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久久国产精品免费| 97色伦亚洲国产| 亚洲国产精品福利| 国产成人97精品免费看片| 亚洲小视频在线观看| 亚洲国产精品久久91精品| 久久久亚洲天堂| 亚洲天堂网站在线观看视频| 日韩中文字幕在线精品| 日韩久久免费电影| 久久精品国产视频| 久久久久久亚洲精品中文字幕| 97国产精品视频人人做人人爱| 成人免费在线视频网址| 亚洲激情国产精品| 在线视频欧美性高潮| 欧美国产视频日韩| 国产亚洲视频在线观看| 国产精品美乳一区二区免费| 日韩精品视频在线播放| 欧美一区二区三区免费观看| 日韩a**中文字幕| 日韩国产高清污视频在线观看| 日本精品视频在线播放| 久久99久久亚洲国产| 久久久久久久久电影| 国产精品69精品一区二区三区| 91大神在线播放精品| 97在线视频免费播放| 色婷婷av一区二区三区在线观看| 国产精品扒开腿做| 亚洲老头同性xxxxx| 精品国偷自产在线视频99| 九九九久久久久久| 日本精品视频在线观看| 国产成人精品一区二区| 久久亚洲成人精品| 欧美大片第1页| 欧美成人高清视频| 国产成人av网址| 在线观看亚洲区| 日本一区二区在线免费播放| 26uuu另类亚洲欧美日本老年| 久久精品一本久久99精品| 欧美激情三级免费| 亚洲精品自在久久| 久久久天堂国产精品女人| 日本亚洲欧洲色| 亚洲国产日韩精品在线| 全色精品综合影院| 亚洲人午夜精品| 亚洲成人激情视频| 色综合天天综合网国产成人网| 亚洲深夜福利视频| 4k岛国日韩精品**专区| 亚洲欧美在线磁力| 精品久久久久久亚洲国产300| 国产美女扒开尿口久久久| xxxx欧美18另类的高清| 久久久免费在线观看| 91在线无精精品一区二区| 精品毛片网大全| 97婷婷涩涩精品一区| 国产成人免费91av在线| 欧美精品久久一区二区| 亚洲另类图片色| 国产精品视频久久久久| 日韩av最新在线观看| 日韩精品中文字| 人九九综合九九宗合| 中文字幕亚洲第一| 91午夜理伦私人影院| 亚洲人成电影在线播放| 91精品国产91久久久久久吃药| 国产精品电影网站| 国产热re99久久6国产精品| 精品亚洲一区二区三区在线观看| 日韩欧美精品在线观看| 日韩av在线资源| 一本大道亚洲视频| 国产成人鲁鲁免费视频a| 成人国产在线视频| 在线精品视频视频中文字幕| 国产偷国产偷亚洲清高网站| 亚洲欧美中文另类| 国产福利精品av综合导导航| 欧美日韩综合视频网址| 国产一区二区黄| 欧美精品videossex性护士| 国产精品视频久| 亚洲综合视频1区| 不卡伊人av在线播放| 日本成人在线视频网址| 欧美日韩一区二区免费视频| 色诱女教师一区二区三区| 亚洲电影中文字幕| 日本精品久久久| 国产日韩欧美视频在线| 亚洲色图50p| 一区二区三区 在线观看视| 欧美性猛交xxxx乱大交极品| 日本精品性网站在线观看| 91免费精品国偷自产在线| 久久精品国产亚洲一区二区| 国产精品27p| 国产丝袜高跟一区| 亚洲女人被黑人巨大进入| 日韩欧美综合在线视频| 国产精品高潮呻吟久久av黑人| 狠狠干狠狠久久| 亚洲色图17p| 久久亚洲国产成人| 美女久久久久久久久久久| 亚洲一级黄色av| 亚洲网站在线看| 精品女同一区二区三区在线播放| 亚洲国产美女久久久久| 日韩av电影在线播放| 伊人久久五月天| 91精品久久久久久久久久入口| 国产亚洲精品激情久久| 欧美极品少妇xxxxx|