Linux OOM-killer로 문제 해결

Linux OOM-killer로 문제 해결

나는 스왑이 없고 설정되어 있는 Linux 시스템을 가지고 vm.overcommit_memory=2있습니다 vm.overcommit_ratio=100. 그러나 이러한 설정은 아무런 효과가 없는 것 같습니다. 많은 메모리를 소비하려고 시도하는 일부 새로 시작된 프로세스는 메모리 할당이 거부되는 대신 여전히 OOM 종료되고 있습니다. 이전에 시작된 프로세스 sysctl -w vm.overcommit_memory=2 vm.overcommit_ratio=100(예: /etc/sysctl.conf부팅 중에 적용되기 전)가 여전히 오버커밋된 메모리에 액세스하여 OOM 킬러를 트리거할 수 있기 때문입니까?(1) 커널 매개변수를 사용하여 메모리 오버커밋을 비활성화하거나 (2) 런타임 시 커널이 모든 프로세스에 대해 오버커밋된 메모리를 모두 할당하도록 강제할 수 있습니까?

편집: 관련 Documentation/Linux 소스 코드 중 일부를 검색한 후(git c6fa8e6de3)(1)그럴 것 같지 않습니다.

답변1

당신은 전혀 불가능한 일을 시도하고 있습니다. 시스템이 거의 고갈될 때까지 실행하면 메모리 고갈로 인해 프로세스가 종료될 가능성이 항상 있습니다. 피할 수 없는 시나리오는 많지만 가장 이해하기 쉬운 시나리오는 스택에 페이지를 추가하는 프로세스로 인해 발생하는 페이지 오류입니다.

룸 킬링을 피하려면 스왑이나 RAM 쿠션이 필요합니다.

관련 정보