스왑 없이 Linux 배포판을 설치하고 RAM이 거의 부족할 때 새 애플리케이션을 실행하면 어떻게 되나요? [복사]

스왑 없이 Linux 배포판을 설치하고 RAM이 거의 부족할 때 새 애플리케이션을 실행하면 어떻게 되나요? [복사]

스왑 파티션이나 스왑 파일 없이 Linux(예: Arch Linux 또는 Debian)를 설치하면 어떻게 되나요? 그러다가 운영 체제를 실행하는 동안 RAM이 거의 소진되면 사용자는 새 응용 프로그램을 엽니다. 이 새로운 애플리케이션에 실제로 필요한 것보다 더 많은 RAM 메모리가 필요하면 어떻게 될까요?

운영 체제의 어떤 부분이 RAM 관리 작업을 처리하며, 다르게 작동하도록 구성할 수 있습니까?

답변1

Linux 커널에는 OOM Killer(메모리 부족)라는 구성 요소가 있습니다. Patrick이 의견에서 지적했듯이 OOM 킬러는 비활성화할 수 있지만 기본 설정은 남용을 허용하는 것입니다(따라서 OOM 킬러를 활성화합니다).

응용 프로그램은 커널에 더 많은 메모리를 요청하고 커널은 메모리가 충분하지 않거나 ulimit프로세스에 더 많은 메모리를 거부하는 데 사용되었기 때문에 메모리를 거부할 수 있습니다. 오버커밋이 활성화된 경우 애플리케이션은 일부 메모리를 요청하고 해당 양을 부여받았지만, 애플리케이션이 (처음으로) 새 메모리 페이지에 쓰고 커널이 실제로 메모리를 할당해야 하지만 그렇게 할 수 없는 경우 그런 다음 커널은 메모리를 확보하기 위해 어떤 프로세스를 종료할지 결정해야 합니다.

커널은 이전 프로세스보다 새로운 프로세스, 특히 많은 메모리를 소비하는 프로세스(및 해당 하위 프로세스)를 종료합니다. 따라서 귀하의 경우 새 프로세스가 시작될 수 있지만 종료될 수 있습니다.

이 파일을 사용할 수 있습니다

/proc/self/oom_adj
/proc/self/oom_score
/proc/self/oom_score_adj

현재 설정을 확인하고 필요한 경우 프로세스를 종료해야 하는 순서를 커널에 알려줍니다.

답변2

커널은 더 많은 메모리 공간을 확보하기 위해 텍스트 페이지를 삭제할 수 있다는 점을 기억하십시오. 텍스트 페이지는 실행 가능한 코드가 포함된 메모리입니다. 이로 인해 페이지가 삭제되고 이후에 디스크의 실행 파일에서 로드되므로 약간의 혼란이 발생할 수 있습니다.

답변3

호크 라킨의 답변초점은 "메모리 부족" 프로세스 킬러에 있으며, 문제가 발생할 수 있다는 사실은 거의 언급되지 않습니다. "사용자가 새 응용 프로그램을 엽니다" 시나리오를 언급하셨습니다. "새 응용 프로그램"을 여는 표준 메커니즘은 일부 프로세스(일반적으로 셸 또는 창 관리자)를 "포크"하고 새 프로세스(기존 프로세스의 복사본)를 만든 다음 새 프로세스에서 "exec ”를 호출하는 것입니다. , 새 프로그램으로 교체됩니다. 메모리 부족으로 인해 둘 다 실패할 수 있습니다.

~에서포크(2):

실수

(즉, 가능한 실패 조건 목록)

       ︙

    이노메

      십자가()메모리 제약으로 인해 필요한 커널 구조를 할당할 수 없습니다.

       ︙

비슷하게실행(2):

       ︙

    이노메

      사용 가능한 커널 메모리가 부족합니다.

       ︙

이번 구글 검색"ENOMEM" 오류를 반환할 수 있는 다른 시스템 기능을 보여줍니다.

따라서 새 프로그램을 실행하거나 새 활동을 시작하기 위해 새 프로그램을 시작하려고 하면 메모리가 부족할 때 사용자(사용자)가 오류 메시지를 받을 수 있습니다.

관련 정보