강제 스와핑시 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.