몇 년 동안 내 운영 체제 의 OOM 킬러 가 제대로 작동하지 않아 시스템이 정지됩니다.
메모리 사용량이 매우 높으면 메모리를 비우기 위해 프로세스를 종료하는 대신 전체 시스템이 몇 시간 또는 며칠 동안 "정지"되는 경향이 있습니다 (사실 : 매우 느려짐) .
내가 기록한 최대 값은 재설정을 수행하기 위해 사임하기 전 7 일입니다.
OOM에 도달하면 측정 할 수 없게 되기 전에 iowait 는 매우 높습니다 (~ 70 %).
도구 : 모든 프로그램이 내 하드 드라이브에서 매우 높은 처리량 (수십 MB / 초 당)으로 읽는다는 것을 보여주었습니다.
그 프로그램들은 무엇을 읽고 있습니까?iotop
-디렉토리 계층?
-실행 코드 자체?
나는 지금 정확히하지 않습니다.
[편집]이 메시지를 썼을 때 (2017 년) 최신 ArchLinux (4.9.27-1-lts)를 사용하고 있었지만 몇 년 전에 이미 문제를 경험했습니다.
다양한 Linux 배포판과 다른 하드웨어 구성에서 동일한 문제가 발생했습니다.
현재 (2019), 최신 데비안 9.6 (4.9.0)을 사용하고 있습니다 . 스왑 파티션이 아닌 16GB 의 물리적 램, 내 OS가 설치된 SSD가 있습니다.
내가 가진 램의 양으로 인해 스왑 파티션을 활성화하고 싶지 않습니다. 스왑 파티션은 문제의 평가를 지연시키기 때문입니다.
또한 SSD를 너무 자주 교체하면 디스크 수명이 단축 될 수 있습니다.
그건 그렇고, 나는 이미 스왑 파티션을 사용하거나 사용하지 않고 시도했지만 문제의 평가를 지연시킬뿐 해결책은 아닙니다.
나에게 문제는 리눅스가 캐시 에서 필수 데이터를 삭제한다는 사실에 기인한다 . 이것은 하드 드라이브에서 매번 모든 것을 읽어야하기 때문에 시스템을 정지시킨다.
Linux가 실행중인 프로그램의 실행 코드 페이지를 삭제하지 않는지 궁금합니다. 이는 일반적으로 많은 양의 데이터를 읽지 않는 프로그램이 이러한 상황에서 어떻게 작동하는지 설명합니다.
이 문제를 해결하기 위해 여러 가지 시도를했습니다.
하나는 (1GB) 로 설정 /proc/sys/vm/min_free_kbytes
되었습니다 1000000
.
이 1GB 는 사용 가능한 상태로 유지되어야하므로이 메모리는 Linux에서 중요한 데이터를 캐시하기 위해 예약되어 있다고 생각했습니다.
그러나 효과가 없었습니다.
또한, 나는 정의하여 그것을 실제 메모리의 크기에 가상 메모리의 크기를 제한하는 이론에 큰 소리를 수있는 경우에도 그를 추가하는 것이 유용 생각 /proc/sys/vm/overcommit_memory
하는 것은 2
, 내 상황에서 상당히 기술적으로 가능하지 않다 응용 프로그램의 종류 때문에 내가 사용하는 데는 몇 가지 이유로 효과적으로 사용하는 것보다 더 많은 가상 메모리가 필요합니다.
파일에 따르면 /proc/meminfo
의 Commited_AS
값은 (16기가바이트은 종종 더 높은 내 시스템의 물리적 램의 두 배 이상이다 Commited_AS가 자주> 32기가바이트입니다).
나는이 문제를 /proc/sys/vm/overcommit_memory
기본값으로 경험했습니다 : 0
, 그리고 잠시 동안 그것을 정의했습니다 :. 1
나는 프로그램 이 때의 반환 값을 확인하지 않기 때문에 잘못 행동하는 대신 OOM 킬러에 의해 살해되는 것을 선호 했기 때문에 malloc
할당이 거부됩니다.
IRC 에서이 문제에 대해 이야기 할 때이 문제를 겪은 다른 Linux 사용자를 만났으므로 많은 사용자가 이것에 관심이 있다고 생각합니다.
나에게 이것은 Windows조차도 높은 메모리 사용량을 더 잘 다루기 때문에 받아 들일 수 없습니다.
더 자세한 정보가 필요하면 제안을 해주십시오.
문서 :
https://en.wikipedia.org/wiki/Thrashing_%28computer_science%29
https://en.wikipedia.org/wiki/Memory_overcommitment
https://www.kernel.org/doc/Documentation/sysctl/vm. txt
https://www.kernel.org/doc/Documentation/vm/overcommit-accounting
https://lwn.net/Articles/317814/
: 그들은 그것에 대해 얘기를
왜 리눅스가 메모리 부족 (OOM) 킬러가 자동으로 실행되지 않지만, SysRq를 키에 따라 작동?
OOM-killer가 때때로 리소스 호그를 죽이지 않는 이유는 무엇입니까?
OOM Killer 사전로드
강제 스와핑시 OOM-killer를 트리거 할 수 있습니까?
OOM 상황 근처에서 높은 대기 시간을 피하는 방법은 무엇입니까?
https://lwn.net/Articles/104179/
https://bbs.archlinux.org/viewtopic.php?id=233843
min_free_kbytes
관련이 없으며 캐시 된 페이지를 예약하지 않습니다. AFAICT 어떤 vm