實作 Windows 容器的資源控制
適用於︰Windows Server 2022、Windows Server 2019
有數個資源控件可以在每個容器和每個資源的基礎上實作。 根據預設,容器執行受限於一般 Windows 資源管理,這一般是以公平共用為基礎,但雖然這些控件的設定可讓開發人員或系統管理員限制或影響資源使用量。 可控制的資源包括:CPU/處理器、記憶體/RAM、磁碟/儲存體 和網路/輸送量。
Windows 容器會利用 作業物件 來分組和追蹤與每個容器相關聯的進程。 資源控件會在與容器相關聯的父作業對象上實作。
在 Hyper-V 隔離 資源控件同時套用至虛擬機以及虛擬機內執行之容器的作業物件時,這可確保即使容器中執行的進程已略過或逸出作業對象,虛擬機也會確保它無法超過定義的資源控制。
資源
本節針對每個資源,提供 Docker 命令行介面之間的對應,例如如何使用資源控制(可能由協調器或其他工具設定)對應至對應的 Windows 主機計算服務 (HCS) API,以及一般 Windows 實作資源控制的方式(請注意,此描述為高階,而且基礎實作可能會變更)。
記憶體
資源 | Location |
---|---|
Docker 介面 | --memory |
HCS 介面 | MemoryMaximumInMB |
共用核心 | JOB_OBJECT_LIMIT_JOB_MEMORY |
Hyper-V 隔離 | 虛擬機記憶體 |
注意
關於 Windows Server 2016 中的 Hyper-V 隔離,使用記憶體上限時,您會看到容器最初配置記憶體的上限數量,然後開始將其傳回至容器主機。 較新版的 Windows Server (1709 或更新版本) 已將此程序最佳化。
CPU (計數)
資源 | Location |
---|---|
Docker 介面 | --cpus |
HCS 介面 | ProcessorCount |
共用核心 | 使用 JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 模擬* |
Hyper-V 隔離 | 公開的虛擬處理器數目 |
CPU (百分比)
資源 | Location |
---|---|
Docker 介面 | --cpu-percent |
HCS 介面 | ProcessorMaximum |
共用核心 | JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP |
Hyper-V 隔離 | 虛擬處理器的 Hypervisor 限制 |
CPU (共用)
資源 | Location |
---|---|
Docker 介面 | --cpu-shares |
HCS 介面 | ProcessorWeight |
共用核心 | JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED |
Hyper-V 隔離 | Hypervisor 虛擬處理器權數 |
儲存空間 (映像)
資源 | Location |
---|---|
Docker 介面 | --io-maxbandwidth/--io-maxiops |
HCS 介面 | StorageIOPSMaximum 和 StorageBandwidthMaximum |
共用核心 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
Hyper-V 隔離 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
儲存空間 (磁碟區)
資源 | Location |
---|---|
Docker 介面 | --storage-opt size= |
HCS 介面 | StorageSandboxSize |
共用核心 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
Hyper-V 隔離 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
其他附註或詳細數據
記憶體需求
Windows 容器會在每個容器中執行一些系統進程,通常是提供個別容器功能,例如使用者管理、網路功能等等... 雖然這些進程所需的大部分記憶體會在容器之間共用,但記憶體上限必須足夠高,才能允許它們。 系統會針對 每個基底映像類型和不含 Hyper-V 隔離的系統需求 檔中提供數據表。
CPU 共用 (不含 Hyper-V 隔離)
使用 CPU 共用基礎實作時(不使用 Hyper-V 隔離時)會 設定JOBOBJECT_CPU_RATE_CONTROL_INFORMATION,特別是將控制旗標設定為JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED並提供適當的權數。 作業物件的有效權數範圍是 1 – 9,預設值為 5,其精確度低於主機計算服務值 1 到 10000。 例如,7500 的共享權數會產生7的權數,或2500的共用權數會產生2的值。