ElastiCache for Redis クラスターノードの「OOM command not allowed」(OOM コマンドは許可されていません) というエラーメッセージを解決する方法を教えてください。

所要時間1分
0

Amazon ElastiCache for Redis クラスターノードのクエリ時に「'maxmemory' より大きいメモリが使用されている場合、OOM コマンドは許可されていません」というエラーが発生します。 これを解決するにはどうすればよいですか?

簡単な説明

OOM エラーは、ElastiCache for Redis クラスターが追加のメモリを解放できないときにが発生します。

ElastiCache for Redis は、メモリ不足時にキャッシュノードのパラメータグループのために設定される maxmemory-policy を実行します。デフォルト値 (volatile-lru) は有効期限 (TTL 値) を設定してキーを失効させることによりメモリを解放します。キャッシュノードが TTL 値を有するキーを有しない場合、代わりにエラーが返されます。

これを解決し、OOM コマンドは許可されていませんというエラーメッセージがクライアントに表示されるのを防ぐには、次のいずれかを組み合わせます。

  • ノードでキーの TTL 値を設定する。
  • パラメータグループを更新して別の maxmemory-policy パラメータを使用する。
  • 既存のキーを手動で削除してメモリを解放する。
  • より大きなノードタイプを選択する。

注: 使用する解決方法の適切な組み合わせは、ユースケースによって異なります。

解決方法

ノードでキーの TTL 値を設定する

ノードでキーの TTL 値を設定できます。その後、デフォルトの volatile-lru メモリ管理ポリシーが有効期限の切れたキーを失効させメモリを解放します。

TTL 値を設定した場合、volatile-ttl 設定を使用することもできます。この設定では、有効期限が設定されたキーのみを TTL が最も低いキーから順に削除することで、スペースが確保されます。

別の maxmemory-policy 設定を選ぶ

キャッシュノードのパラメータグループの maxmemory-policy に次のいずれかの値を設定します。

  • 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 のノードタイプ固有のパラメータ

Key eviction - Overview of Redis key eviction policies (LRU, LFU, etc.) (キーエビクション - Redis キーエビクションポリシー (LRU、LFU など) の概要)

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ