本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
保留 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 作業) 檢視容器執行個體註冊多少記憶體。如果您嘗試透過為特定執行個體類型提供任務盡可能多的記憶體,以最大限度地提高資源使用率,則可以觀察該容器執行個體可用的記憶體,然後為工作指派那麼多記憶體。
檢視容器執行個體記憶體
開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2
。 -
在瀏覽窗格中,選擇 [叢集],然後選擇託管容器執行個體的叢集。
-
選擇基礎結構,然後在容器執行個體下選擇容器執行個體。
-
「資源」段落顯示容器執行處理的已註冊記憶體和可用記憶體。
「已註冊的記憶體」值是容器執行個體的值;首次啟動 Amazon ECS 時向 Amazon ECS 註冊,而「可用記憶體」值則是尚未分配給任務的值。