OOM 킬러는 어떤 프로세스를 먼저 죽일 지 어떻게 결정합니까?


92

답변은 값을 기반으로 OOM 상황이 발생했을 때 커널이 취한 조치를 설명합니다 sysctl vm.overcommit_memory.

overcommit_memory가 0 또는 1로 설정 되면 이 overcommit활성화되고 프로그램은 실제로 사용 가능한 것보다 많은 메모리를 할당 할 수 있습니다.

이 상황에서 메모리가 부족하면 어떻게됩니까? OOM 킬러 는 어떤 프로세스를 먼저 죽일 지 어떻게 결정합니까?


1
나는 값이 1과 2가 아니라 0과 1이 아니라고 생각합니다.
fpmurphy

여기에서 serverfault.com/questions/606185/… , 0과 1이 올바른 값입니다.
Rui F Ribeiro

1
에서 사용할 수있는 훌륭한 설명이 linux-mm.org/OOM_Killer은
Jarek Przygódzki

kernel.org/doc/Documentation/vm/overcommit-accounting 에 따르면 0, 1 및 2는 모두 유효한 값입니다.
Derek Lewis

답변:


109

시스템의 안정성을 위협 할 수있는 정도로 프로세스에 의해 메모리가 완전히 소모되면 OOM 킬러가 등장합니다.

참고 : 커널이 실행하려고하는 나머지 프로세스의 원활한 기능을 위해 충분한 메모리가 확보 될 때까지 프로세스를 계속 종료하는 것이 OOM Killer의 작업입니다.

OOM Killer는 죽일 최상의 프로세스 를 선택해야합니다 . 여기서 가장 좋은 것은 죽일 때 최대 메모리를 확보하고 시스템에 가장 중요하지 않은 프로세스를 나타냅니다.

주요 목표는 수행되는 손상을 최소화하면서 동시에 사용 가능한 메모리 양을 최대화하는 프로세스 수를 최소화하는 것입니다.

이를 용이하게하기 위해 커널 oom_score은 각 프로세스마다를 유지 합니다. 디렉토리 아래 파일 시스템 oom_score의 각 프로세스를 볼 수 있습니다 ./procpid

$ cat /proc/10292/oom_score

oom_score프로세스 의 가치가 높을수록 메모리 부족 상황에서 OOM Killer 에 의해 종료 될 가능성이 높습니다 .

OOM_Score계산 은 어떻게 되나요?

David의 패치 세트에서 오래된 badness () 휴리스틱은 거의 완전히 사라졌습니다. 대신, 계산은 사용 가능한 메모리의 몇 퍼센트가 프로세스에서 사용되고 있는지에 대한 간단한 질문으로 바뀝니다. 시스템 전체의 메모리가 부족하면 "사용 가능한 메모리"는 시스템에 사용 가능한 모든 RAM 및 스왑 공간의 합계입니다.

대신, 주어진 CPU / 제어 그룹에 허용 된 메모리를 소진하여 OOM 상황이 발생한 경우 "사용 가능한 메모리"는 해당 제어 그룹에 할당 된 총량입니다. 메모리 정책에 의해 부과 된 한계가 초과되면 유사한 계산이 수행됩니다. 각 경우에 프로세스의 메모리 사용은 상주 세트 (사용중인 RAM 페이지 수)와 스왑 사용의 합계로 간주됩니다.

이 계산은 결과적으로 10 배의 수를 산출합니다. 사용 가능한 메모리의 모든 바이트를 사용하는 프로세스의 점수는 1000이고 메모리가없는 프로세스의 점수는 0입니다. 이 점수에 대한 휴리스틱 조정은 거의 없지만 코드는 여전히 루트 프로세스의 점수에서 사용자 소유 프로세스보다 약간 더 가치가 있다는 개념에서 약간의 금액을 뺍니다 (30).

적용되는 또 다른 조정은 / proc을 통해 조정할 수있는 각 프로세스의 oom_score_adj 변수에 저장된 값을 추가하는 것입니다. 이 노브를 사용하면 사용자 공간에서 OOM 킬러에 대한 각 프로세스의 매력을 조정할 수 있습니다. -1000으로 설정하면 OOM 킬이 완전히 비활성화되고 +1000으로 설정하면 관련 프로세스에서 큰 대상을 그리는 것과 같습니다.

참고 문헌

http://www.queryhome.com/15491/whats-happening-kernel-starting-killer-choose-which-process https://serverfault.com/a/571326


3
선함도 역할을하지 않습니까?
neverMind9
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.