如何解決適用於 Redis 叢集節點的 ElastiCache 錯誤訊息 "OOM command not allowed(不允許使用 OOM 命令)"?

1 分的閱讀內容
0

在查詢 Redis 叢集節點的 Amazon ElastiCache 時,我收到 "OOM command not allowed when used memory greater than 'maxmemory'(使用的記憶體大於 '最大記憶體' 時不允許使用 OOM 命令)"錯誤訊息? 如何解決此問題?

簡短說明

當適用於 Redis 叢集的 ElastiCache 無法釋放任何額外的記憶體時,就會發生 OOM 錯誤。

適用於 Redis 的 ElastiCache 會在記憶體不足時,實作為快取節點參數群組設定的最大記憶體政策。預設值 (volatile-lru) 藉由移出具有設定到期時間 (TTL 值) 的金鑰來釋放記憶體。當快取節點沒有任何具有 TTL 值的金鑰時,會傳回錯誤。

若要解決此錯誤並防止用戶端接收不允許使用 OOM 命令的錯誤訊息,請執行下列動作組合:

  • 為節點上的金鑰設定 TTL 值。
  • 更新參數群組以使用不同的最大記憶體政策設定 參數。
  • 手動刪除一些現有的金鑰以釋放記憶體。
  • 選擇較大的節點類型。

**注意:**您使用哪些解決方法組合取決於您的特定使用案例。

解決方法

為節點上的金鑰設定 TTL 值

您可以為節點上的金鑰設定 TTL 值。然後,預設的volatile-lru 記憶體管理政策會移出過期的金鑰以釋放記憶體。

如果設定 TTL 值,也可以使用 volatile-ttl 設定。此設定會從 TTL 最低的金鑰開始,僅移出設定到期時間的金鑰,藉此騰出空間。

選擇不同的最大記憶體政策設定

將快取節點參數群組的最大記憶體政策設定為下列其中一個值:

  • **allkeys-lru:**首先移出最近使用較少的金鑰來騰出空間。
  • **allkeys-random:**移出隨機金鑰來騰出空間。
  • **volatile-random:**移出具有過期集的隨機金鑰來騰出空間。

此外,Redis 4.0 還提供最不常使用的 (LFU) 移出模式:

  • **allkeys-lfu:**移出存取次數最少的金鑰來騰出空間。
  • **volatile-lfu:**從存取次數最少的時間開始,移出具有過期設定的金鑰來騰出空間。

刪除現有金鑰以釋放記憶體

您可以使用 ** DEL ** 命令刪除現有的金鑰以釋放記憶體。如需詳細資訊,請參閱 redis.io 網站上的 Del key [key...]

**重要事項:**刪除現有金鑰會暫時解決 OOM 錯誤。請務必重新考慮您的記憶體管理策略。

選擇較大的節點類型

每個節點類型都有不同的可用記憶體數量。您無法修改節點上的可用記憶體數量。但是,您可以使用較大的節點類型以及更多的儲存空間。

**重要事項:**使用較大的節點類型可暫時解決 OOM 錯誤。請務必重新考慮您的記憶體管理策略。


相關資訊

Redis 4.0.10 參數變化

Redis 節點類型的特定參數

移出金鑰 - Redis 金鑰移出政策概述 (LRU 和 LFU 等)

AWS 官方
AWS 官方已更新 2 年前