保留 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 最佳化視窗伺服器 AMI 的m4.large執行個體輸出範例。

TotalPhysicalMemory 8589524992

執行個體的記憶體總量有 8589524992 位元組,轉為任務可使用的記憶體則有 8191 MiB。

查看容器實例記憶體

您可以在 Amazon ECS 主控台 (或透過執行個DescribeContainer體 API 作業) 檢視容器執行個體註冊多少記憶體。如果您嘗試透過為特定執行個體類型提供任務盡可能多的記憶體,以最大限度地提高資源使用率,則可以觀察該容器執行個體可用的記憶體,然後為工作指派那麼多記憶體。

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

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

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

  4. 「資」段落顯示容器執行處理的已註冊記憶體和可用記憶體。

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