問題窺探
在服務器當中,假設iis服務部署多個站點,那么只要其中一個站點出問題,假設是cpu100%,或者是記憶體爆滿,那么這臺服務器上的其他站點都會跟著掛掉,同樣在使用容器時,單臺主機上可能會跑幾十個容器,容器雖然都相互隔離,但是用的卻是與宿主機相同的內核,CPU、記憶體、磁盤等硬體資源,如果不對容器資源進行限制,容器之間就會相互影響,
解決辦法
Docker提供了限制記憶體,CPU或磁盤IO的方法, 可以對容器所占用的硬體資源大小以及多少進行限制,我們在使用docker create創建一個容器或者docker run運行一個容器的時候就可以來對此容器的硬體資源做限制,
記憶體限制
Docker 提供的記憶體限制功能有以下幾點:
1、容器能使用的記憶體和交換磁區大小,
2、容器的核心記憶體大小,
3、容器虛擬記憶體的交換行為,
4、容器記憶體的軟性限制,
5、是否殺死占用過多記憶體的容器,
6、容器被殺死的優先級
-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 時間,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/266555.html
標籤:.NET Core
上一篇:C#連接Excel讀取與寫入資料庫SQL ( 下 )
下一篇:理解C#泛型運作原理
