使用docker對容器資源進行限制

問題窺探

在服務器當中,假設iis服務部署多個站點,那麼只要其中一個站點出問題,假設是cpu100%,或者是內存爆滿,那麼這臺服務器上的其餘站點都會跟着掛掉。一樣在使用容器時,單臺主機上可能會跑幾十個容器,容器雖然都相互隔離,可是用的倒是與宿主機相同的內核,CPU、內存、磁盤等硬件資源。若是不對容器資源進行限制,容器之間就會相互影響。docker

解決辦法

Docker提供了限制內存,CPU或磁盤IO的方法, 能夠對容器所佔用的硬件資源大小以及多少進行限制,咱們在使用docker create建立一個容器或者docker run運行一個容器的時候就能夠來對此容器的硬件資源作限制。服務器

內存限制

Docker 提供的內存限制功能有如下幾點:app

一、容器能使用的內存和交換分區大小。編輯器

二、容器的核心內存大小。spa

三、容器虛擬內存的交換行爲。code

四、容器內存的軟性限制。blog

五、是否殺死佔用過多內存的容器。內存

六、容器被殺死的優先級資源

-m,--memory     內存限制,格式是數字加單位,單位能夠爲 b,k,m,g。最小爲 4M
--memory-swap   內存+交換分區大小總限制。格式同上。必須必-m設置的大
--memory-reservation    內存的軟性限制。格式同上
--oom-kill-disable      是否阻止 OOM killer 殺死容器,默認沒設置
--oom-score-adj         容器被 OOM killer 殺死的優先級,範圍是[-1000, 1000],默認爲 0
--memory-swappiness     用於設置容器的虛擬內存控制行爲。值爲 0~100 之間的整數
--kernel-memory         核心內存限制。格式同上,最小爲 4M

用戶內存限制就是對容器能使用的內存和交換分區的大小做出限制。
使用時要遵循兩條直觀的規則:部署

-m,--memory選項的參數最小爲 4M。
--memory-swap不是交換分區,而是內存加交換分區的總大小,因此--memory-swap必須比-m,--memory大。

cpu限制

docker run命令和 CPU 限制相關的全部選項以下:

--cpuset-cpus=""          容許使用的 CPU 集,值能夠爲 0-3,0,1
-c,--cpu-shares=0   CPU     共享權值(相對權重)
cpu-period=0              限制 CPU CFS 的週期,範圍從 100ms~1s,即[1000, 1000000]
--cpu-quota=0             限制 CPU CFS 配額,必須不小於1ms,即 >= 1000
--cpuset-mems=""          容許在上執行的內存節點(MEMs),只對 NUMA 系統有效

其中--cpuset-cpus用於設置容器可使用的 vCPU 核。-c,--cpu-shares用於設置多個容器競爭 CPU 時,各個容器相對能分配到的 CPU 時間比例。--cpu-period和--cpu-quata用於絕對設置容器能使用 CPU 時間。

相關文章
相關標籤/搜索