본문 바로가기

개발중/Redis

[Redis 트러블슈팅] OOM command not allowed when used memory > 'maxmemory'.

728x90
반응형

초기에 Redis 와 Web 을 연동시에 잘 연동이 되는 것을 확인했으나.

어느 순간부터 아래와 같은 에러가 발생하는 것을 확인했습니다.

 

2023-09-11 23:41:34.216 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost]           : Exception Processing ErrorPage[errorCode=0, location=/error]
org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: OOM command not allowed when used memory > 'maxmemory'.

 

이슈 해결

apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
  namespace: lucy3
data:
  redis-config: |
    maxmemory 10gb
    maxmemory-policy allkeys-lru

 

  • maxmemory 설정
    • redis 에 접근해서 INFO memory 명령어 실행
    • used_memory 값으로 현재 사용중인 레디스 메모리 사용량 확인 !
  • maxmemory-policy 의 설정 allkeys-lru
    • 이 정책을 설정하면, Redis는 메모리가 부족할 때 가장 오랫동안 접근되지 않은 키, 즉 가장 나중에 사용된 키를 먼저 제거합니다. 이 정책은 모든 키에 적용되기 때문에 특정 키의 중요도나 만료 시간 등을 고려하지 않습니다.
      • 다른 옵션들도 있으니 참고
        • volatile-lru
          • 설정된 만료 시간(expire time)이 있는 키 중에서 가장 오랫동안 사용되지 않은 키를 삭제합니다.
        • allkeys-random
          • 모든 키 중에서 무작위로 키를 선택하여 삭제합니다.
        • volatile-random
          • 만료 시간이 설정된 키 중에서 무작위로 키를 선택하여 삭제합니다.
        • volatile-ttl
          •  만료 시간이 설정된 키 중에서 가장 먼저 만료될 키를 삭제합니다.
        • noeviction
          •  어떠한 데이터도 삭제하지 않습니다. 메모리가 부족하면 쓰기 작업은 실패합니다.

 

설정을 한 후에도 적용이 되지 않는다면 pod 를 재시작하는 방법도 있습니다.

 

kubectl rollout restart deployment {deployment name} -n {namespace name}
728x90
반응형