如何限制docker容器對內存的使用

如何限制docker容器對內存的使用

docker 容器是一個開源的應用容器引擎,讓開發者可以以統一的方式打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何安裝了docker引擎的服務器上(包括流行的Linux機器、windows機器),也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app)。幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,他們不依賴于任何語言、框架包括系統。

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

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

限制容器不能過多的使用主機的內存是非常重要的。對于 linux 主機來說,一旦內核檢測到沒有足夠的內存可以分配,就會扔出 OOME(Out Of Memmory Exception),并開始殺死一些進程用于釋放內存空間。糟糕的是任何進程都可能成為內核獵殺的對象,包括 docker daemon 和其它一些重要的程序。更危險的是如果某個支持系統運行的重要進程被干掉了,整個系統也就宕掉了!這里我們考慮一個比較常見的場景,大量的容器把主機的內存消耗殆盡,OOME 被觸發后系統內核立即開始殺進程釋放內存。如果內核殺死的第一個進程就是 docker daemon 會怎么樣?結果是沒有辦法管理運行中的容器了,這是不能接受的!
針對這個問題,docker 嘗試通過調整 docker daemon 的 OOM 優先級來進行緩解。內核在選擇要殺死的進程時會對所有的進程打分,直接殺死得分最高的進程,接著是下一個。當 docker daemon 的 OOM 優先級被降低后(注意容器進程的 OOM 優先級并沒有被調整),docker daemon 進程的得分不僅會低于容器進程的得分,還會低于其它一些進程的得分。這樣 docker daemon 進程就安全多了。
我們可以通過下面的腳本直觀的看一下當前系統中所有進程的得分情況:

#!/bin/bash for?proc?in?$(find?/proc?-maxdepth?1?-regex?'/proc/[0-9]+');?do ????printf?"%2d?%5d?%sn"? ????????"$(cat?$proc/oom_score)"? ????????"$(basename?$proc)"? ????????"$(cat?$proc/cmdline?|?tr?'

精品综合久久久久久97|
中文字幕久久亚洲一区|
久久久精品人妻一区二区三区四
|
国产亚洲精品久久久久秋霞
|
久久久综合香蕉尹人综合网|
欧美麻豆久久久久久中文|
国产成人久久精品一区二区三区|
久久er99热精品一区二区|
91性高湖久久久久|
久久精品国产亚洲αv忘忧草|
丁香狠狠色婷婷久久综合|
天天做夜夜做久久做狠狠|
99精品国产在热久久|
国产精品久久久久久五月尺|
久久国产免费观看精品|
日韩精品久久久肉伦网站
|
亚洲精品蜜桃久久久久久|
国产一区二区三精品久久久无广告|
久久这里只有精品首页|
久久er国产精品免费观看8|
久久w5ww成w人免费|
精品综合久久久久久98|
亚洲天堂久久久|
久久成人18免费网站|
99久久人妻无码精品系列蜜桃|
伊人久久无码精品中文字幕|
久久精品18|
7777精品伊人久久久大香线蕉|
7国产欧美日韩综合天堂中文久久久久|
亚洲精品乱码久久久久久蜜桃图片
|
国产精品一久久香蕉国产线看|
久久久久久曰本AV免费免费|
久久亚洲AV无码西西人体|
国产99久久久国产精品~~牛|
韩国无遮挡三级久久|
狠色狠色狠狠色综合久久|
国产精品久久久久久久久鸭|
国产精品一区二区久久国产|
久久精品aⅴ无码中文字字幕不卡|
久久久久国产精品嫩草影院|
国产精品久久久久久久人人看|