일부 하위 프로세스를 삭제하는 oomkiller와 관련된 것으로 보이는 간헐적인 문제가 발생하지만 그 이유를 이해할 수 없습니다.
sysctl을 통해 모든 oomkiller 활동을 억제하는 편리한 방법이 있습니까?
이것이 작동해야 한다는 몇 가지 지침을 찾았지만 나에게는 존재하지 않습니다.
sysctl -w memory.oom_control=1
sysctl -w vm.oom-kill=0
나는 또한 사람들이 이 두 가지를 제안하는 것을 보았지만 옴 킬러는 계속됩니다.
sysctl vm.overcommit_memory=2
sysctl vm.overcommit_kbytes=0
답변1
당신은 사용할 수 있습니다 /proc/sys/vm/overcommit_memory
(참조공정(5)),예를 들어
echo 2 > /proc/sys/vm/overcommit_memory
루트로 비활성화하십시오. 커널도 참조하세요docs/vm/overcommit-회계
(이전 커널을 실행 중인 경우 업그레이드를 고려하십시오.)
답변2
꽤 오래된 질문이긴 하지만, 오늘 책을 읽다가 문득 떠오른 질문인데...
sysctl -wmemory.oom_control=1
당신은 거의 이것을하고 싶지 않습니다. 대부분의 Linux 배포판에는 기본 설정이 "0"으로 되어 있습니다. 이는 커널이 오버커밋된 메모리의 양을 추측한다는 의미입니다. "1"은 항상 과도하게 사용됨을 의미합니다. (거의) 안정된 상태의 컴퓨터에서 OOM 오류가 발생하는 경우 다음 값을 사용해야 합니다.2. 이것은 남용을 비활성화하지 않습니다! 이는 단순히 커널이 프로그램에 할당하는 메모리 양에 대한 제한을 설정합니다. 이 제한은 overcommit_ratio
또는 에 의해 결정됩니다 overcommit_kbytes
. 안타깝게도이 파일이들 각각 내에서 상충되는 가치를 해결하는 방법에 대한 표시는 없습니다. 하지만 당신이 보면이것...
하나를 설정하면 다른 하나는 비활성화됩니다(읽을 때 0으로 표시됨).
초과 커밋의 올바른 값은 머신이 사용되는 방식에 따라 달라집니다. 기본값(RAM + SWAP * 1.5 = 50)은 데스크톱에 적합할 수 있지만 서버의 경우 IME가 상당히 높습니다. 서버를 교체된 위치에 배치하는 것은 일반적으로 좋지 않습니다.
따라서 짧은 버전은 다음과 같습니다.
sysctl vm.overcommit_memory=2
sysctl vm.overcommit_ratio=20
...여전히 OOM 킬러가 나타나면 더 낮은 비율 값을 시도해 보세요.