![스왑 없이 Linux 배포판을 설치하고 RAM이 거의 부족할 때 새 애플리케이션을 실행하면 어떻게 되나요? [복사]](https://linux55.com/image/132381/%EC%8A%A4%EC%99%91%20%EC%97%86%EC%9D%B4%20Linux%20%EB%B0%B0%ED%8F%AC%ED%8C%90%EC%9D%84%20%EC%84%A4%EC%B9%98%ED%95%98%EA%B3%A0%20RAM%EC%9D%B4%20%EA%B1%B0%EC%9D%98%20%EB%B6%80%EC%A1%B1%ED%95%A0%20%EB%95%8C%20%EC%83%88%20%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%90%98%EB%82%98%EC%9A%94%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
스왑 파티션이나 스왑 파일 없이 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" 오류를 반환할 수 있는 다른 시스템 기능을 보여줍니다.
따라서 새 프로그램을 실행하거나 새 활동을 시작하기 위해 새 프로그램을 시작하려고 하면 메모리가 부족할 때 사용자(사용자)가 오류 메시지를 받을 수 있습니다.