Amazon ElastiCache Redis 클러스터 노드에서 오류 메시지 "OOM command not allowed when used memory > 'maxmemory'"를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 6월 4일

ElastiCache Redis 클러스터 노드에서 쿼리를 수행하면 클라이언트에서 다음 오류를 수신합니다. "OOM command not allowed when used memory > 'maxmemory'". 이 오류는 무엇을 의미하며, 해결하려면 어떻게 해야 합니까?

간략한 설명

ElastiCache Redis 클러스터에서 추가 메모리를 해제할 수 없는 경우 OOM 오류가 발생합니다.

메모리가 부족하면 ElastiCache Redis는 캐시 노드의 파라미터 그룹에 대해 설정된 maxmemory-policy를 구현합니다. 기본값(volatile-lru)은 만료 시간("TTL 값")이 설정된 키를 제거하여 메모리를 확보합니다. 캐시 노드에 TTL 값이 있는 키가 없으면 대신, 오류를 반환합니다.

클라이언트에서 "OOM command not allowed…" 오류 메시지를 표시하지 않도록 하려면 다음과 같은 몇 가지 조합을 수행합니다.

  • 노드에서 키의 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(Least Frequently Used) 제거 모드를 제공합니다.

  • allkeys-lfu: 가장 적게 액세스한 키를 제거하여 공간을 확보합니다.
  • volatile-lfu: 가장 적게 액세스한 키부터 시작해 만료가 설정된 키를 제거하여 공간을 확보합니다.

기존 키를 삭제하여 메모리 확보

DEL 명령으로 기존 키를 삭제하여 메모리를 확보할 수 있습니다.

중요: 기존 키만 삭제하면 일시적으로 OOM 오류가 해결됩니다. 또한 메모리 관리 전략도 다시 고려해야 합니다.

더 큰 노드 유형 선택

ElastiCache Redis에서 사용 가능한 최대 메모리는 노드 유형으로 결정되며, 수정할 수 없습니다. 그러나 스토리지가 더 많은 더 큰 노드 유형을 사용할 수 있습니다.

중요: 더 큰 노드 유형을 사용하면 일시적으로 OOM 오류가 해결됩니다. 또한 메모리 관리 전략도 재고해야 합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?