OOM-Killer가 요청이 너무 많은 프로세스를 직접 종료할 수 없는 이유는 무엇입니까?

OOM-Killer가 요청이 너무 많은 프로세스를 직접 종료할 수 없는 이유는 무엇입니까?

여기에 설명해보세요:Linux는 메모리가 부족한지 묻지 않고 프로세스를 종료하기 시작합니까?OOM-Killer는 overcommit_memory다음과 같은 방법으로 구성할 수 있습니다:

  • 2 = 과도하게 사용되지 않음. 너무 많이 요청하면 할당이 실패합니다.
  • 0, 1 = 과도하게 사용됨(경험적 또는 항상). 죽이다일부실제로 너무 많은 메모리에 액세스할 때 일부 경험적 방법을 기반으로 하는 프로세스입니다.

자, 제가 이것을 완전히 오해하고 있을 수도 있지만 실제로 너무 많은 할당된 메모리에 액세스하려고 시도하는 프로세스를 종료하는 옵션(또는 기본 옵션이 아닌 이유)이 없는 이유는 무엇입니까?

답변1

다음 상황을 고려해보세요.

  • 4GB의 사용 가능한 메모리가 있습니다.
  • 결함이 있는 프로세스에는 3.999GB가 할당됩니다.
  • 작업 관리자를 열어 런어웨이 프로세스를 종료합니다. 작업 관리자는 0.002GB를 할당합니다.

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

또는:

  • 4GB의 사용 가능한 메모리가 있습니다.
  • 결함이 있는 프로세스에는 3.999GB가 할당됩니다.
  • 작업 관리자를 열어 런어웨이 프로세스를 종료합니다. X 서버는 작업 관리자 창을 처리하기 위해 0.002GB를 할당합니다.

이제 X 서버가 종료되었습니다.

그것은 문제를 일으키지 않았습니다. 단지 "잘못된 시간에 잘못된 장소에 있었던 것"이었습니다. 메모리가 남지 않았을 때 가장 먼저 더 많은 메모리를 할당하는 프로세스가 되기도 하지만 애초에 모든 메모리를 사용하는 프로세스는 아닙니다.

답변2

이 질문은 오랫동안 나를 괴롭혀 왔으며, 나는 "Linux 옹호자들"이 OOM Killer를 지금까지 발명된 최고의 도구로 선전하고 있다는 것을 발견했습니다. (대부분의 사람들이 매일 Linux를 사용하고 있는지 궁금합니다. 그들이 말하는 내용은 제가 실제로 보는 것과는 거리가 멀기 때문입니다...)

내 경험(많은 정지 및 충돌, 하드 재부팅 및 복구할 수 없는 많은 고통스럽고 낭비되는 시간)을 바탕으로 OOM Killer에 대한 나의 이해는 OOM Killer가 손상되고 작동하지 않으며 본질적으로 결함이 있다는 것입니다. 원래 기사에서 언급했듯이 주범(Windoze처럼 더 많은 메모리를 할당하는 응용 프로그램...)을 죽이지 않고 대신 주요 대형 프로세스를 죽이기 때문에 설계되었습니다. 이는 주변 프로세스에 아무런 영향을 미치지 않습니다. . 결과가 어떻든 상관 없습니다.

나에게 이 Linux OOM Killer는 컴퓨터의 메모리가 128MB 미만이고 인터넷 브라우저가 존재하기 오래 전에 설계된 것처럼 보입니다. 이는 오늘날의 기준으로는 비실용적이며 쓸모가 없습니다.

다음 명령은 키보드 단축키를 할당하는 데 유용합니다.

먼저 다음 명령을 사용하여 종료하려는 프로세스를 테스트하십시오.

ps aux | grep STRING
ps aux | grep PORTION_OF_NAME_WITHOUT_QUOTES_OR_SPACES

종료하려는 프로세스가 표시되면 아래 스크립트에서 괄호 안에 넣으세요.

#!/bin/bash
#
kill -9 $(ps aux | grep type=renderer)
# the above will kill all my Chromium processes
# without having to restart my entire browser or losing progress
# incognito window will be kept alive, instead of lost
#
sudo killall tumblerd
# (optional)

또는 더 나은 방법은 다음과 같습니다.

sudo apt remove tumbler

관련 정보