保留 Amazon ECS Linux 容器執行個體記憶體 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

保留 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 操作) 中檢視容器執行個體向 註冊的記憶體數量。如果您嘗試為特定執行個體類型提供盡可能多的記憶體,以最大化資源使用率,您可以觀察該容器執行個體可用的記憶體,然後為您的任務指派更多記憶體。

檢視容器執行個體記憶體
  1. 開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2

  2. 在導覽窗格中,選擇叢集,然後選擇託管容器執行個體的叢集。

  3. 選擇基礎設施,然後在容器執行個體下,選擇容器執行個體。

  4. 資源區段顯示容器執行個體的已註冊和可用記憶體。

    已註冊的記憶體值是容器執行個體的值;在第一次啟動時向 Amazon ECS 註冊,而可用的記憶體值是尚未分配給任務的值。