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

最終更新日: 2019 年 6 月 4 日

ElastiCache Redis クラスターノードのクエリを実行するときに次のエラーがクライアントに表示されます。「使用されるメモリが「最大メモリ」を超える場合、OOM コマンドは許可されていません」。このエラーは何を意味し、修復するにはどうすればよいですか。

簡単な説明

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

メモリ不足になると、ElastiCache 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 コマンドを使用して、既存のキーを削除することでメモリを解放できます。

重要: 既存のキーの削除は、OOM エラーを一時的にのみ解決するものです。メモリ管理戦略を再検討するようにしてください。

より大きなノードタイプを選択する

ElastiCache Redis で使用可能な最大メモリはノードタイプによって決定され、変更できません。ただし、より大きなストレージがあれば、より大きなノードタイプを使用することができます。

重要: より大きなノードタイプの使用は、OOM エラーを一時的にのみ解決するものです。メモリ管理戦略を再検討するようにしてください。