내 컴퓨터에는 스왑 파티션/파일이 없고 2GB RAM만 있습니다.
때로는 일부 프로세스로 인해 메모리가 포화되는 경우가 있습니다(도래 송곳+ 브라우저 + 컴파일러 +...) 시스템이 무기한 정지되는 경우 시스템을 다시 시작하는 유일한 방법(하드 리셋 제외)은 SysRq를 사용하는 것입니다.
알겠어요메모리 부족 킬러메모리가 완전히 가득 차면 커널이 OOM Killer 자체를 할당할 수 없기 때문에 도움이 되지 않습니다.
메모리가 완전히 가득 찼을 때 실제로 작동할 수 있도록 OOM Killer를 미리 로드할 수 있는 방법이 있습니까?
아니면 메모리가 가득 찼을 때 OOM Killer가 활성화되도록 커널을 조정할 수 있습니까 ${TOTAL_RAM} - 10MB
?
답변1
나는 커널이 자체적으로, 즉 oom_killer를 시작하기 위해 일부 메모리를 예약한다고 확신합니다.
(메모리가 부족해서 로드할 수 없다면 oom_killer가 무슨 소용이 있나요?)
답변2
커널은가장 작은여유 공간 자체의 양. 다음을 통해 값을 볼 수 있습니다.
$ sysctl vm.min_free_kbytes
vm.min_free_kbytes = 2842
$ cat /proc/sys/vm/min_free_kbytes
vm.min_free_kbytes = 2842
이 값의지하다RAM 용량(위의 경우 512MB)에 대해서는 늘려볼 수 있지만 이것이 문제를 해결해줄 수는 없을 것 같습니다(OOM이 더 빨라질 확률이 더욱 높아집니다).
OOM 킬러는 애플리케이션을 종료할 수 있을 만큼 충분한 여유 메모리를 가지고 있어야 합니다. 그렇지 않으면 Chris가 이미 지적한 대로 메모리 보유 목적을 상실하게 됩니다.
편집하다: 그런데, 단지 커널 매개변수(OOM 값)를 수정하는 것이 사용자 공간 프로그램 문제를 해결하는 가장 좋은 방법은 아니라고 생각합니다. 커널은 무슨 일이 일어나고 있는지, 특정 상황을 처리하는 방법을 가장 잘 알고 있습니다. 이러한 값을 사용하지 말고 대신 사용자 공간 프로그램(Xorg, 브라우저)에서 생성된 메모리 문제를 해결해 보십시오. 또 댓글도 보세요mm/oom_kill.c소스 문서에서 커널 개발자조차도 OOM 킬러가 잘 구성된 환경에서 많은 일을 해야 한다고 믿지 않습니다.