問題窺探
在服務器當中,假設iis服務部署多個站點,那么只要其中一個站點出問題,假設是cpu100%,或者是內(nèi)存爆滿,那么這臺服務器上的其他站點都會跟著掛掉。同樣在使用容器時,單臺主機上可能會跑幾十個容器,容器雖然都相互隔離,但是用的卻是與宿主機相同的內(nèi)核,CPU、內(nèi)存、磁盤等硬件資源。如果不對容器資源進行限制,容器之間就會相互影響。
解決辦法
Docker提供了限制內(nèi)存,CPU或磁盤IO的方法, 可以對容器所占用的硬件資源大小以及多少進行限制,我們在使用docker create創(chuàng)建一個容器或者docker run運行一個容器的時候就可以來對此容器的硬件資源做限制。
內(nèi)存限制
Docker 提供的內(nèi)存限制功能有以下幾點:
1、容器能使用的內(nèi)存和交換分區(qū)大小。
2、容器的核心內(nèi)存大小。
3、容器虛擬內(nèi)存的交換行為。
4、容器內(nèi)存的軟性限制。
5、是否殺死占用過多內(nèi)存的容器。
6、容器被殺死的優(yōu)先級
-m,--memory 內(nèi)存限制,格式是數(shù)字加單位,單位可以為 b,k,m,g。最小為 4M
--memory-swap 內(nèi)存+交換分區(qū)大小總限制。格式同上。必須必-m設置的大
--memory-reservation 內(nèi)存的軟性限制。格式同上
--oom-kill-disable 是否阻止 OOM killer 殺死容器,默認沒設置
--oom-score-adj 容器被 OOM killer 殺死的優(yōu)先級,范圍是[-1000, 1000],默認為 0
--memory-swappiness 用于設置容器的虛擬內(nèi)存控制行為。值為 0~100 之間的整數(shù)
--kernel-memory 核心內(nèi)存限制。格式同上,最小為 4M
用戶內(nèi)存限制就是對容器能使用的內(nèi)存和交換分區(qū)的大小作出限制。
使用時要遵循兩條直觀的規(guī)則:
-m,--memory選項的參數(shù)最小為 4M。
--memory-swap不是交換分區(qū),而是內(nèi)存加交換分區(qū)的總大小,所以--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="" 允許在上執(zhí)行的內(nèi)存節(jié)點(MEMs),只對 NUMA 系統(tǒng)有效
其中--cpuset-cpus用于設置容器可以使用的 vCPU 核。-c,--cpu-shares用于設置多個容器競爭 CPU 時,各個容器相對能分配到的 CPU 時間比例。--cpu-period和--cpu-quata用于絕對設置容器能使用 CPU 時間。
到此這篇關于如何使用docker對容器資源進行限制的文章就介紹到這了,更多相關docker容器資源限制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!