本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
保留 Amazon ECS Linux 容器執行個體記憶體
當 Amazon ECS 容器代理程式向叢集註冊容器執行個體時,代理程式必須判斷容器執行個體可以為您的任務預留多少記憶體。由於存在平台記憶體額外負荷和由系統核心佔用的記憶體,這數字會與 Amazon EC2 執行個體公告的安裝記憶體數量不同。舉例而言,m4.large
執行個體安裝了 8 GiB 的記憶體。不過,這不一定會轉換為容器執行個體註冊時可用於任務的確切 8192 MiB 記憶體。
Amazon ECS 容器代理程式提供名為 的組態變數ECS_RESERVED_MEMORY
,可用來從配置給您任務的集區中移除指定數量 MiB 的記憶體。這可為重要系統程序有效地預留記憶體。
如果您使用任務佔用容器執行個體上的所有記憶體,則您的任務可能會與記憶體的關鍵系統程序競爭,並可能啟動系統故障。
舉例而言,若在容器代理程式檔案中指定 ECS_RESERVED_MEMORY=256
,則代理程式會將記憶體總量減去 256 MiB 再註冊給該執行個體,而 256 MiB 的記憶體就無法由 ECS 任務配置。如需代理程式組態變數的詳細資訊及設定方式,請參閱 Amazon ECS 容器代理程式組態 和 引導 Amazon ECS Linux 容器執行個體以傳遞資料。
如果您為任務指定 8192 MiB,而且您的容器執行個體都沒有 8192 MiB 或更高的記憶體可滿足此需求,則任務無法放置在叢集中。如果您使用的是受管運算環境,則 AWS Batch 必須啟動較大的執行個體類型以容納請求。
也應預留一些記憶體供 Amazon ECS 容器代理程式以及容器執行個體上其他重要的系統程序使用,任務的容器才不會彼此爭奪相同的記憶體,而導致引發系統故障的可能。
Amazon ECS 容器代理程式會使用 Docker ReadMemInfo()
函數來查詢作業系統可用的記憶體總量。Linux 和 Windows 都提供命令列公用程式來判斷總記憶體。
範例 - 判定 Linux 記憶體總量
free 命令會傳回作業系統辨識出的記憶體總量。
$
free -b
執行 Amazon ECS 最佳化 Amazon Linux AMI 的 m4.large
執行個體的輸出範例。
total used free shared buffers cached Mem:
8373026816
348180480 8024846336 90112 25534464 205418496 -/+ buffers/cache: 117227520 8255799296
執行個體的記憶體總量有 8373026816 位元組,轉為任務可使用的記憶體則有 7985 MiB。
範例 - 判定 Windows 記憶體總量
wmic 命令會傳回作業系統辨識出的記憶體總量。
C:\>
wmic ComputerSystem get TotalPhysicalMemory
執行 Amazon ECS 最佳化 Windows Server AMI 之m4.large
執行個體的範例輸出。
TotalPhysicalMemory
8589524992
執行個體的記憶體總量有 8589524992 位元組,轉為任務可使用的記憶體則有 8191 MiB。
檢視容器執行個體記憶體
您可以在 Amazon ECS 主控台 (或使用 DescribeContainerInstances API 操作) 中檢視容器執行個體向 註冊的記憶體數量。如果您嘗試為特定執行個體類型提供盡可能多的記憶體,以最大化資源使用率,您可以觀察該容器執行個體可用的記憶體,然後為您的任務指派更多記憶體。
檢視容器執行個體記憶體
開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2
。 -
在導覽窗格中,選擇叢集,然後選擇託管容器執行個體的叢集。
-
選擇基礎設施,然後在容器執行個體下,選擇容器執行個體。
-
資源區段顯示容器執行個體的已註冊和可用記憶體。
已註冊的記憶體值是容器執行個體的值;在第一次啟動時向 Amazon ECS 註冊,而可用的記憶體值是尚未分配給任務的值。