>  기사  >  데이터 베이스  >  Linux에서 redis 데이터베이스의 overcommit_memory 오류를 해결하는 방법

Linux에서 redis 데이터베이스의 overcommit_memory 오류를 해결하는 방법

WBOY
WBOY앞으로
2023-05-27 20:55:532711검색

Background

회사의 redis가 때때로 db를 저장하지 못하는 경우가 있습니다. 로그를 통해 다음과 같은 알람이 발견되는데, 이는 아마도 이로 인한 것일 수 있습니다.

[13223] 17 Mar 13:18:02.207 # WARNING overcommit_memory가 0으로 설정되었습니다! 메모리 부족 상태에서 백그라운드 저장이 실패할 수 있습니다. 이 문제를 해결하려면 /etc/sysctl.conf에 'vm.overcommit_memory = 1'을 추가한 다음 재부팅하거나 'sysctl vm.overcommit_memory=1' 명령을 실행하여 적용하세요.

그래서 검색해본 결과 저와 같은 문제를 겪으신 분들도 계시고, 기본적으로는 그것 때문에 발생한 것으로 판단됩니다.

커널 매개변수 overcommit_memory

입니다. 内存分配策略

선택값: 0, 1, 2.

  • 0은 커널이 애플리케이션 프로세스에서 사용할 수 있는 메모리가 충분한지 확인한다는 의미입니다. 사용 가능한 메모리가 충분하면 메모리 애플리케이션이 허용됩니다. 그렇지 않으면 메모리 애플리케이션이 실패하고 오류가 반환됩니다. 신청 과정.

  • 1은 커널이 현재 메모리 상태에 관계없이 모든 물리적 메모리를 할당하도록 허용함을 나타냅니다.

  • 2, 커널이 모든 물리적 메모리와 스왑 공간의 합을 초과하는 메모리를 할당할 수 있음을 나타냅니다.

오버커밋 및 OOM

Linux는 대부분의 메모리 요청에 "예"로 응답하여 더 큰 프로그램을 실행할 수 있습니다. 왜냐하면 메모리를 신청한 후에는 메모리가 즉시 사용되지 않기 때문입니다. 이 기술을 오버커밋이라고 합니다. Linux는 메모리 부족을 감지하면 OOM 킬러(OOM은 메모리 부족을 나타냄)의 작동을 시작합니다. 메모리를 확보하기 위해 커널 스레드보다는 일부 사용자 모드 프로세스를 종료하는 데 우선순위를 부여합니다.

oom-killer가 발생하면 Linux는 어떤 프로세스를 종료할까요? 프로세스를 선택하는 함수는 각 프로세스에 대한 포인트 수(0~1000)를 계산하는 oom_badness 함수(mm/oom_kill.c에 있음)입니다. 점수가 높을수록 프로세스가 종료될 가능성이 높아집니다. 프로세스당 포인트 수는 oom_score_adj와 관련이 있으며 oom_score_adj를 설정할 수 있습니다(-1000이 가장 낮음, 1000이 가장 높음).

해결책:

매우 간단합니다. 프롬프트를 따르십시오(vm.overcommit_memory를 1로 설정).

커널 매개변수를 수정하는 방법에는 세 가지가 있지만 루트 권한이 필요합니다.

  • (1) 편집/ etc/sysctl.conf, vm.overcommit_memory=1을 변경한 다음 sysctl -p를 실행하여 구성 파일을 적용합니다

  • (2) sysctl vm.overcommit_memory=1

  • (3) echo 1 > proc/sys/vm/overcommit_memory

위 내용은 Linux에서 redis 데이터베이스의 overcommit_memory 오류를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제