[Redis] Redis 실행 시 발생하는 오류 해결

hwwwa·2023년 2월 5일
0

지난 글 참고) [과제] NHN Cloud 인스턴스에서 Redis 설치2 - 압축파일 이용

문제 상황

지난번 설치 과정에서 아무런 설정 없이 Redis를 실행하였더니 WARNNING이 여러개 뜨게되었다.

Redis 실행 시 아무런 경고 메세지 없이 깔끔하게 화면이 나오도록 수정해보자❗️



오류 해결

메세지를 살펴보면 4개의 오류 메세지가 출력된 것을 알 수 있다. 하나하나 살펴보자!

1. config 파일을 지정하지 않음

Warning: no config file specified, using the default config. In order to specify a config file use ./src/redis-server /path/to/redis.conf

👉 레디스 서버 실행 시 설정 파일 지정해주기

$ ./src/redis-server redis.conf

2. 기본 시스템 자원의 제한 값 초과

You requested maxclients of 10000 requiring at least 10032 max file descriptors.
Server can't set maximum open files to 10032 because of OS error: Operation not permitted.
Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
  • 현재 최대 열 수 있는 file descriptor 수는 4096개이므로 maxclients가 설정값 10000이 아닌 4064까지만 가능함

👉 maxclients를 증가시키고 싶다면 'ulimit -n' 증가시키기

ulimit -n 10032

👉 혹은 redis.conf에서 maxclients 설정 값 감소시키기

$ vi redis.conf
maxclients 4064

3. TCP backlog 설정값 오류

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
  • TCP backlog는 레디스 서버의 초당 클라이언트 연결 개수
  • redis.conf에서는 tcp-backlog를 511로 설정했는데, 리눅스 설정은 128로 되어 있으니 리눅스 설정 값을 증가시키라는 메시지
  • TCP backlog 즉, somaxconn은 네크워크 관련 커널 파라미터로서 listen()으로 바인딩 된 서버 소켓에서 accept()를 기다리는 소켓 개수(queue)
  • somaxconn 값 확인
$ sysctl -a | grep somaxconn  
net.core.somaxconn = 128

👉 sysctl.conf 파일에서 somaxconn 값 설정해주기

$ sudo vi /etc/sysctl.conf
net.core.somaxconn = 4096
  • 설정 적용을 위해 재부팅하거나 아래 명령어 실행
    $ sudo sysctl net.core.somaxconn=4096

4. Memory overcommit이 설정되어있지 않음

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
  • Memory overcommit이 설정되어 있지 않는 경우
    • 메모리 부족 상태에서 백그라운드 저장 또는 복제 실패 가능
    • 메모리 부족 상태 없이 장애 발생 가능

👉 sysctl.conf에서 vm.overcommit_memory 값 설정해주기

$ sudo vi /etc/sysctl.conf
vm.overcommit_memory = 1
  • 설정 적용을 위해 재부팅하거나 아래 명령어 실행
    $ sudo sysctl vm.overcommit_memory=1


결과

아무런 경고 메세지 없이 깔끔하게 화면이 나오는 것을 확인할 수 있다!




참고
http://redisgate.kr/redis/configuration/redis_start.php#redis_start_msg_stop
http://redisgate.kr/redis/configuration/param_daemonize.php
https://myblog.opendocs.co.kr/archives/1514

0개의 댓글