본문 바로가기

SearchDeveloper/개발자를 위한 레디스

2장 레디스 시작하기

도커로 띄움

서버 환경 설정 변경

file descriptor 수는 레디스 maxClients + 32 로

  • 소켓도 파일이다: 리눅스는 클라이언트가 접속할 때마다 '소켓'을 생성하는데, 이를 파일(File Descriptor)로 취급합니다.
    • 레디스 내부에서 쓰는 파일 디스크립터 수는 32다.
  • 만약 nofiles 값이 1024(기본값인 경우가 많음)라면, 클라이언트가 1,000명만 접속해도 레디스는 더 이상 요청을 받을 수 없다.
  • ulimit -a 로 open files 혹은 nofiles 로 파일 디스크립터 값 확인

 

THP(Transparent Huge Page) 기능 끄기

  • 리눅스는 메모리를 페이지 단위(4KB)로 관리하는데, 메모리 크기 클수록 페이지 관리 테이블 크기(TLB)가 커짐
  • 테이블 크기가 크면 오버헤드 이슈 있어서 아예 페이지 크기를 키워버리는 THP기능이 도입됨
  • 근데 레디스에선 THP기능이 레이턴시 올라감 → 꺼야함

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never



vm.overcommit_memory=1로 변경

  • 레디스가 AOF(Append Only File) 혹은 레디스DB에 저장할 때 fork()를 이용해 자식 프로세스를 만든다.
  • COW(Copy On Write)가 동작해 부모와 자식 프로세스가 메모리 페이지 공유하다가 데이터가 변경되면 메모리 페이지를 복사해서 메모리 사용량 증가한다.
  • vm.overcommit_memory=0 이면 커널이 판단해서 메모리 부족할거같으면 fork() 거절한다.
  • 1로 바꿔 무조건 할당하게 한다.

sudo sysctl vm.overcommit_memory=1

 

somaxconn, syn_backlog 설정 변경

  • 레디스 설정 중에 tcp-backlog 가 있다. 레디스 인스턴스가 클라와 통신할 때 쓰는 tcp backlog 큐의 크기이다.
  • 이 값은 서버 설정 중 somaxconn, syn_backlog 값을 넘으면 안된다.
  • 레디스 tcp backlog 는 511이라 위 값을 511보다 큰 값으로 설정한다.

 

 

레퍼런스

(책) 개발자를 위한 레디스

글 읽어주셔서 언제나 감사합니다. 좋은 피드백, 개선 피드백 너무나도 환영합니다.