如何檢查 ElastiCache for Redis 自行設計的叢集中的記憶體用量,並實作控制高記憶體用量的最佳實務?

2 分的閱讀內容
0

我想檢查 Amazon ElastiCache for Redis 自行設計的叢集中的記憶體用量,並實作控制高記憶體用量的最佳實務。

簡短說明

下列項目是在 ElastiCache for Redis 自行設計的叢集中高記憶體用量的原因:

  • 最近新增的鍵值:其他鍵值組會造成記憶體用量增加。此外,已存在鍵值上的其他元素會導致記憶體用量增加。若要確認節點上最近的資料變更,請檢查 SetTypeCmds 指標。如需詳細資訊,請參閱 Redis 網站的 INFO 頁面上的 commandstats 命令。
  • 緩衝區用量增加:用戶端會透過網路連線到 Redis。如果包含 Pub/Sub 用戶端的用戶端沒有足夠快速從快取讀取,則 Redis 會將回應資料保留在用戶端輸出緩衝區中。 如需詳細資訊,請參閱 Redis 網站上的 Redis Pub/Sub輸出緩衝區限制。如果網路頻寬存在瓶頸或叢集持續繁重負載,則緩衝區用量可能會累積。這會導致記憶體耗盡和效能降級。依預設,ElastiCache for Redis 不會限制輸出緩衝區的成長,每個用戶端都有自己的緩衝區。若要檢查緩衝區用量,請使用 client list 命令。如需詳細資訊,請參閱 Redis 網站上的 CLIENT LIST
  • **大量的新連線數:**大量的新連線數可能會增加記憶體用量。所有新連線都會建立消耗記憶體的檔案描述子,而且彙總記憶體消耗量可能會導致資料移出或 OOM 錯誤。若要檢視新連線的數量,請檢查 NewConnections 指標。
  • 高交換用量: 有可用記憶體時,快取節點上有一些交換用量是正常的行為。但是,交換用量過多可能會導致效能降低。在受到高記憶體壓力的節點中發生高交換用量。這會導致可用的記憶體不足。若要監控主機上的交換,請使用 SwapUsage 指標。
  • **高記憶體片段化:**高記憶體片段化表示作業系統記憶體管理效率不足。移除鍵值時,Redis 可能無法釋放記憶體。若要監控片段化比率,請使用 MemoryFragmentationRatio 指標。如果您有片段化問題,請開啟 activedefrag 參數以進行作用中記憶體重組。
  • **大鍵:**大鍵具有較大的資料大小或大量元素。大鍵可能會導致高記憶體用量。若要偵測資料集中的大鍵,請使用 redis-cli --bigkeys 命令或 redis-cli --memkeys 命令。如需詳細資訊,請參閱 Redis 網站上的掃描大鍵掃描鍵

解決方法

檢查記憶體用量

若要檢查在 ElastiCache for Redis 自行設計的叢集中的記憶體用量,請檢閱下列的 Redis 指標
**注意:**這些指標會針對叢集中的每個節點發佈在 Amazon CloudWatch 中。

  • **BytesUsedForCache:**這是 Redis 為所有目的配置的總位元組數。此值用於判斷叢集的記憶體使用率。若要擷取此指標,請在 Redis 節點上執行 INFO 命令。如需詳細資訊,請參閱 Redis 網站上的 INFO
  • **FreeableMemory:**這是主機層次的指標,顯示主機上可用的記憶體數量。如果記憶體用量因快取資料或超載而增加,則 FreeableMemory 會降低。FreeableMemory 的降低表示主機上的記憶體不足。FreeableMemory 過低時,可能會發生交換。
  • **DataBaseMemoryUsagePercentage:**這是叢集節點所使用的記憶體百分比。此指標達到其臨界值的 100% 時,Redis 會啟動 Redis 最大記憶體移出政策。如需詳細資訊,請參閱 Redis 網站上的鍵值移出。若要擷取此指標,請在 Redis 節點上執行 INFO 命令。如需詳細資訊,請參閱 Redis 網站上的 INFO

**注意:**依預設,ElastiCache 會保留 25% 的 maxmemory 以供非資料使用,例如容錯移轉和備份。如果您未指定足夠的保留記憶體以供非資料使用,則交換可能會增加。如需詳細資訊,請參閱管理保留記憶體

控制高記憶體用量的最佳實務

  • 在鍵值上使用 TTL: 若要防止儲存不必要的鍵值並移除過期的鍵值,請對鍵值指定到期的 TTL。如需詳細資訊,請參閱 Redis 網站上的 TTL。如果是高鍵值移出數量,則節點會在記憶體壓力下執行。若要避免鍵值在同一時段過期,請在使用 TTL 時新增隨機性。
  • 使用移出政策: 快取記憶體滿載時,Redis 會根據 maxmemory-policy 移除鍵值以釋放空間。預設的 maxmemory-policy 政策會設定為 volatile_lru。最佳實務是選擇適合您工作負載的移出政策。
  • 配置保留記憶體: 為了避免容錯移轉或備份期間出現問題,最佳實務是將 reserved_memory_percentage 參數設定為至少 25%,以供非資料使用。如果沒有足夠的保留記憶體來執行容錯移轉或備份,則會發生交換和效能問題。
  • 使用連線儲存區: 連線儲存區可讓您控制 Redis 用戶端嘗試的大量新連線。如需詳細資訊,請參閱如何為 Redis 用戶端和 ElastiCache for Redis 自行設計的叢集實作最佳實務?
  • 設定伺服器端閒置逾時: 無論用戶端是否將請求傳送至 ElastiCache for Redis,開啟的連線會消耗記憶體,而用量會隨著時間的推移而增加。若要將閒置連線造成不必要的記憶體用量降到最低,請透過參數群組設定伺服器端逾時,以在指定的時段後關閉閒置連線。為了避免提前關閉連線,請將伺服器端閒置逾時值設定高於用戶端程式庫中的用戶端逾時值。
  • 調整輸出緩衝區大小限制: 調整輸出緩衝區限制以控制緩衝區空間用量。ElastiCache for Redis 參數群組會包含以 client-output-buffer-limit 開頭的參數,以避免高用戶端輸出緩衝區用量。這些參數沒有建議的限制。確保您以標準來衡量工作負載,並為輸出緩衝區限制選擇適當的值。
  • 使用雜湊對應: 雜湊對應有助於具有大量鍵值的資料結構。此外,若要與雜湊表相比減少記憶體佔用量,請使用 ziplist 編碼。如需詳細資訊,請參閱 Redis 網站上的記憶體最佳化。注意:雜湊對應為複式命令,可能會導致 Redis 引擎用量激增。
  • 擴展叢集: 如果您在預期的工作負載下增加記憶體壓力,則請擴展叢集以降低記憶體壓力。
  • 設定記憶體用量的警示: 若要對到達預設臨界值的記憶體用量啟動警示,請使用 CloudWatch 警示。您建立 CloudWatch 警示時,請使用 BytesUsedForCacheDatabaseMemoryUsagePercentage 指標。
AWS 官方
AWS 官方已更新 10 個月前