Amazon ElastiCache for Redis 클러스터 노드를 쿼리하면 "OOM command not allowed when used memory than 'maxmemory'" 오류가 표시됩니다. 이 문제를 해결하려면 어떻게 해야 합니까?
간략한 설명
ElastiCache for Redis 클러스터에서 추가 메모리를 해제할 수 없는 경우 OOM 오류가 발생합니다.
ElastiCache for 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 명령을 사용해 기존 키를 삭제하여 메모리를 확보할 수 있습니다. 자세한 내용은 redis.io 웹 사이트의 Del 키[key...]를 참조하세요.
중요: 기존 키를 삭제하면 일시적으로 OOM 오류가 해결됩니다. 또한 메모리 관리 전략도 다시 고려해야 합니다.
더 큰 노드 유형 선택
각 노드 유형은 사용 가능한 메모리 용량이 다릅니다. 노드에서 사용 가능한 메모리 용량은 수정할 수 없습니다. 그러나 더 많은 스토리지의 더 큰 노드 유형을 사용할 수 있습니다.
중요: 더 큰 노드 유형을 사용하면 일시적으로 OOM 오류가 해결됩니다. 또한 메모리 관리 전략도 다시 고려해야 합니다.
관련 정보
Redis 4.0.10 파라미터 변경 사항
Redis 노드 유형별 파라미터
키 제거 - Redis 키 제거 정책(LRU, LFU 등) 개요