vm.overcommit_memory
설정을 통해 메모리 오버커밋을 비활성화하면 2
기본적으로 시스템은 아래와 같이 스왑 차원 + 실제 메모리의 50%까지 메모리 할당을 허용합니다.여기.
매개변수를 수정하여 배율을 변경할 수 있습니다 vm.overcommit_ratio
. 80%로 설정했다고 가정하면 실제 메모리의 80%가 사용될 수 있습니다.
내 질문은 다음과 같습니다
- 나머지 20%로 시스템은 무엇을 하게 될까요?
- 애초에 이 매개변수가 왜 필요한가요?
- 왜 항상 100%로 설정하면 안 되나요?
답변1
나머지 20%로 시스템은 무엇을 하게 될까요?
커널은 남은 물리적 메모리를 자체 목적(내부 구조, 테이블, 버퍼, 캐시 등)으로 사용합니다. 메모리 재사용 설정은 사용자 공간 애플리케이션에 대한 가상 메모리 예약을 처리합니다. 커널은 가상 메모리가 아닌 실제 메모리를 사용합니다.
애초에 이 매개변수가 왜 필요한가요?
이 overcommit_ratio
매개변수는 애플리케이션이 미래에 합리적으로 사용할 수 있는 것보다 더 많은 가상 메모리를 유지하지 못하도록 하기 위해 설계된 구현 선택입니다. 즉, 실제로 메모리에 액세스할 때(또는 적어도 액세스를 시도할 때)입니다.
Linux 커널 개발자는 50% 설정을 overcommit_ratio
합리적인 기본값으로 간주합니다. 커널은 물리적 RAM의 50% 이상을 사용할 필요가 없다고 가정합니다. 마일리지는 다양할 수 있으므로 조정이 가능합니다.
왜 항상 100%로 설정하면 안 되나요?
100%(또는 "너무 높은" 값)로 설정해도 커널이 RAM을 0%(또는 너무 적게) 사용한다고 가정할 수 없기 때문에 초과 커밋을 안정적으로 비활성화할 수 없습니다.
커널이 필요한 모든 물리적 메모리를 점유할 수 있으므로 애플리케이션이 충돌하는 것을 방지할 수 없습니다.
답변2
비율을 100%로 설정하면 파일 백업 페이지나 커널 할당(예: 커널 코드, 네트워크 버퍼 등)을 위한 공간이 예약되지 않습니다.
그럼에도 불구하고 커널 구조가 할당되어 과도한 커밋이 발생합니다. 일반적으로 개별적으로 제한됩니다(예: 네트워크 버퍼 설정이 있음). 전체 한도는 컨테이너 호스팅에 대한 것이지만 전체 한도는 50%라고 생각하지 않습니다.
파일 지원 페이지는 일반적으로 사용자 공간 코드를 실행하는 곳이므로 공간도 필요합니다.