Amazon ElastiCache Redis クラスターノードの「使用されるメモリが「maxmemory」を超える場合、OOM コマンドは許可されていません」のエラーメッセージをどのように解決できますか?

最終更新日: 2020 年 6 月 8 日

Amazon ElastiCache for Redis クラスターノードのクエリ時に、クライアントが「「maxmemory」のメモリが使用されている場合、OOM コマンドは許可されていません」というエラーを受け取ります。このエラーは何を意味し、修復するにはどうすればよいですか?

簡単な説明

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

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 エラーを一時的にのみ解決するものです。メモリ管理戦略を再検討するようにしてください。