왜 OOM-Killer가 너무 많은 것을 요구하는 프로세스를 죽일 수 없습니까?


12

설명 여기 움 - 킬러 통해 구성 할 수 있다는 overcommit_memory것을 :

  • 2 = 초과 커밋 없음 너무 많이 요청하면 할당이 실패합니다.
  • 0, 1 = 초과 커밋 (지속적으로 또는 항상) 죽여 일부 과정에서 너무 많은 메모리가 실제로 액세스 할 몇 가지 추론을 기반으로 (들).

이제는 완전히 이해하지 못하지만 할당 된 메모리에 실제로 액세스하려고 시도하는 프로세스를 죽이는 옵션이없는 이유는 무엇입니까?


중요한 시스템 프로세스가 너무 많은 메모리를 요구하면 어떻게됩니까?
Lawrence

우선- 이 일을 할 수 있습니다 . 그러나 그 질문의 가장 큰 문제는 프로세스가 메모리를 요구 하면 새로 실행 되고 있다는 것입니다. 즉, 이것은 최신 처리와 관련된 새로운 프로세스입니다. OOM 대신 3 일 동안 열지 않은 IM 클라이언트가 시스템 메모리 낭비를 계속 허용 했습니까? 아니면 올해 YouTube에 실제로로드 된 시간이 있습니까? linuxatemyram.com
mikeserv

3
이것이 no overcommit옵션이 본질적으로하는 일입니다. 프로세스가 너무 많은 메모리를 요구하면 실패합니다. 오류를 확인하면 대개 자체적으로 종료됩니다. 그렇지 않으면 malloc()반환 되는 null 포인터를 역 참조하려고 할 때 세그먼트 오류 가 발생하여 충돌이 발생합니다.
Barmar

no overcommit인용 된 소스 (예 : kernel.org/doc/Documentation/vm/overcommit-accounting ) 에 따라 2는 실제로 모드 입니다. 그에 따라 질문을 편집 할 것입니다.
hans_meine

답변:


23

이 시나리오를 고려하십시오.

  • 4GB의 메모리가 없습니다.
  • 잘못된 프로세스는 3.999GB를 할당합니다.
  • 런 어웨이 프로세스를 종료하기 위해 작업 관리자를 엽니 다. 작업 관리자는 0.002GB를 할당합니다.

종료 된 프로세스가 메모리를 요청한 마지막 프로세스 인 경우 작업 관리자가 종료됩니다.

또는:

  • 4GB의 메모리가 없습니다.
  • 잘못된 프로세스는 3.999GB를 할당합니다.
  • 런 어웨이 프로세스를 종료하기 위해 작업 관리자를 엽니 다. X 서버는 0.002GB를 할당하여 작업 관리자의 창을 처리합니다.

이제 X 서버가 종료됩니다. 문제를 일으키지 않았습니다. 그것은 단지 "잘못된 시간에 잘못된 장소에"있었습니다. 남은 메모리가 없을 때 더 많은 메모리를 할당하는 첫 번째 프로세스가되었지만 모든 메모리를 사용하여 시작한 프로세스는 아니 었습니다.


예제를 확장한다는 것은 프로세스가 메모리의 99.999 %를 소비하는 경우 메모리를 필요로하기 때문에 메모리를 필요로하기 때문에 절대 프로세스를 종료 할 수 없다는 것을 의미합니다.
Sled

13
이 사실은 리눅스 철학이며 필요한 사실은 아닙니다. Windows 3.0은 필요한 대화 상자를 포함하여 OOM 처리를 위해 충분한 메모리를 예약하여 해결했습니다.
MSalters 2018 년

@MSalters :이 예제에는 실제로 적용되지 않습니다. 예는 거의 모든 메모리를 예약 한 프로세스에 관한 것 입니다. OOM을 죽일만큼 충분하지 않습니다. 분명히 모든 OS에서 OOM 처리를 위해 예약 된 메모리가 충분해야합니다. 그러나 OOM 처리를 호출하는 프로세스는 오작동이 아닌 메모리를 예약하는 다음 프로세스가됩니다. 물론, Windows 3.0에 항상 작업 관리자를 실행하기 위해 충분한 메모리가 예약되어 있거나 OOM 처리기가 항상 프로세스를 종료하라는 메시지를 표시 한 경우가 아니라면. (어떤 = 잘못된 프로세스를 죽이는!)
ALEKSI Torhamo

3
@AleksiTorhamo : 나는 실제로 후자를 의미했습니다. Windows 3.0에는 완전한 작업 관리자가 없었으며 메모리가 사전 할당 된 유명한 블루 스크린이있었습니다.
MSalters
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.