강제 스와핑시 OOM-killer를 트리거 할 수 있습니까?


26

시스템이 사전에 비활성 페이지 ( vm.swappiness)를 스왑 할 수 있지만 시스템에 RAM이 부족하고 (메모리 부족이 아닌) 스왑이 발생하면 oom-killer를 호출 할 수 있습니까?

궁극적 인 목표는 주요 페이지 오류로 인해 디스크가 긁 히기 시작할 때 시스템이 연삭되는 것을 멈추게하지만 여전히 비활성 페이지가 스왑되도록하는 것입니다.

또 다른 요구는 oom-killer가 트리거되기 전에 시스템이 얼마나 많은 스왑 메모리를 사용해야하는지 구성하는 것입니다. 이런 식으로 시스템은 너무 멀리 가지 않는 한 조금씩 스왑에 빠질 수 있습니다. 또는 모든 RAM을 사용하기 전에 oom-killer를 트리거하도록 이러한 임계 값을 설정할 수 있으므로 항상 파일 시스템 캐시를위한 공간이 있으므로 디스크 스레 싱을 더 많이 피할 수 있습니다.

그렇게하기가 어려운 것 같지 않습니다. 시스템에 X 램이 사용되거나 사용되지 않을 때 oom-killer에게 트리거하도록 지시 할 수있는 것처럼 보입니다. 그러나 이것이 내가 묻는 이유입니다. 모르겠어요

명확히하기 위해 스왑을 끄거나 vm.swappiness매개 변수를 조정하지 않습니다.


3
흥미롭게도 스왑 파일이없는 경우에도 발생합니다. 분명히 읽기 전용 메모리 매핑 파일 (실행 파일, 라이브러리, 그래픽 리소스 등)이 대신 스왑 아웃됩니다.
— WGH

Facebook의 oomd 는 전체 시스템 처리량 (즉, 스 래싱시에만)을 기반으로 프로세스를 종료하도록 설계된 사용자 공간 데몬입니다. 그러나 데스크탑 / 워크 스테이션 (cgroup 또는 컨테이너에 작업을 넣지 않았을 수도 있음)을 설정하는 것은 꽤 복잡해 보입니다.
— Jeffrey Bosboom

답변:


22

나는 또한 그 문제로 어려움을 겪었다. 나는 시스템이 무엇이든 관계없이 반응을 유지하기를 원하며 몇 분 동안 프로세스를 잃는 것을 선호합니다. 커널 oom killer를 사용하여 이것을 달성 할 수있는 방법이없는 것 같습니다.

그러나 사용자 공간에서는 원하는대로 할 수 있습니다. 따라서 가용 RAM이 10 % 이하로 떨어지면 RSS로 가장 큰 프로세스를 중단시키는 Early OOM Daemon ( https://github.com/rfjakob/earlyoom )을 작성했습니다 .

earlyoom이 없으면 http://www.unrealengine.com/html5/ 를 몇 번 시작하여 내 컴퓨터 (8GB RAM)를 쉽게 잠글 수 있습니다. 이제 유죄 브라우저 탭은 문제가 해결되기 전에 종료됩니다.


1
고마워, 바로 내가 찾던 것입니다. 이제 column -t -s,거대한 csv 파일을 계속 실행 하여 earlyoom응답하지 않는 것을 알기 전에 불가능한 경우 파일을 종료 시킬 수 있습니다.
— henfiber

4

이것은 지나치게 정교한 솔루션처럼 들립니다. 적은 양의 스왑 공간 (128-256MiB)을 할당하는 것이 좋습니다 (최대 절전 모드가 아닌 설정에서 컴퓨터 에서이 작업을 수행 함). 이렇게하면 커널이 일부 페이지를 스왑 할 수 있지만 상황이 나 빠지기 전에 OOM 킬러가 호출됩니다.

정말로 이것을 원한다면 스왑 사용을 모니터링하고 Magic SysReq 키를 사용하여 OOM-killer를 호출하는 자체 스크립트 / 프로그램을 작성해야한다고 생각합니다 (프로그래밍 방식으로 수행 할 수 있음 /proc/sysrq-trigger).


1
작은 스왑을 갖는 것이 매우 우아한 해결책은 아니라고 주장합니다. 기본적으로 스왑의 유용성을 제한합니다. 비활성 페이지가 많고 10GB의 스왑을 사용하면 이점이 있습니까? ~ 100gb의 램이있는 상자가 있는데 10gb의 스왑은 큰 아이디어가 아닙니다. 그리고 사용자 공간에서이를 수행하기 위해 응용 프로그램을 작성하는 것은 문제에 열려 있습니다 (커널에서 기본적으로 비교).
— Patrick

따라서 "좋은 스와핑"과 "나쁜 스와핑"을 구별 할 수있는 메커니즘이 필요하기 때문에 고안하기 어려운 알고리즘입니다. 분명히 적절한 스왑의 금액은 기계가 다음 :-)이 있음을 할당에 대한 10GiB이 적절한 그렇다면, RAM의 양 및 실행중인 작업 부하에 따라 달라집니다
— mgorven

왜 어려운가요? 두 가지 유형의 스왑,으로 인한 선제 적 스왑 vm.swappiness및 램 부족으로 인한 강제 스왑이 있습니다. 커널이 스왑되어 oom-killer를 트리거하기 만하면됩니다. 또한 10GB는 강제 스와핑이 디스크를 스래쉬하기 위해 많은 공간을 남겨 둡니다.
— Patrick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.