Linux는 물리적 메모리가 부족할 때 항상 중단됩니다.

Linux는 물리적 메모리가 부족할 때 항상 중단됩니다.

저는 커널을 사용하고 ArchLinux있는데 3.18.6-1소프트웨어가 실제 메모리보다 더 많은 메모리를 사용하는 경우(총 메모리 사용량이 5.8GB를 초과하는 경우) 항상 지연되고 응답하지 않으며 제가 할 수 있는 일은 컴퓨터를 재설정하는 것뿐입니다. 나는 swap충분히 큰 것을 제공했다/etc/fstab

/swapfile swap swap defaults 0 0

내 것은 명령의 출력 vm.swappiness입니다 .1free -m

              total        used        free      shared  buff/cache   available
Mem:           7800        3059         688         239        4053        4204
Swap:         10247           0       10247

교환성을 증가시킨 10다음 메모리를 많이 차지하는 프로그램을 실행 해 보았습니다.munch. 씨 하지만 4000MB 정도에 도달하면 항상 멈춥니다.

내 리눅스에 무슨 문제가 있나요?

아니면 가장 많은 메모리를 사용하는 프로그램을 자동으로 종료하는 방법이 있습니까? (이것은 아마도 가장 최근에 실행된 프로그램이자 valgrind가장 최근의 테스트 프로그램일 것입니다)

답변1

나는 그것을 시도했지만 echo 1 | sudo tee /proc/sys/vm/oom_kill_allocating_task문제의 프로그램이 실제로 종료되기 전에 여전히 몇 분 동안 지연됩니다. 내 테스트에서는 이것이 earlyoom이 상황에 가장 적합합니다. 설치하려면 다음을 입력하십시오.

yaourt --needed --noconfirm -S --force earlyoom
sudo cp /usr/bin/earlyoom /usr/local/bin/
sudo systemctl enable earlyoom
sudo systemctl start earlyoom

이제 프로그램을 다시 컴파일하고 실행해 보세요.

echo '
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv) {
    int max = -1;
    int mb = 0;
    char* buffer;
    if(argc > 1) max = atoi(argv[1]);
    while((buffer=malloc(1024*1024)) != NULL && mb != max) {
        memset(buffer,0,1024*1024);
        printf("Allocated %d MB\n", ++mb);
    }
    return 0;
}
' > munch.c && gcc -O2 -o munch munch.c 
./munch

다음과 유사한 출력이 제공됩니다.

Allocated 1 MB
Allocated 2 MB
Allocated 3 MB
...
Allocated 4367 MB
Allocated 4368 MB
Allocated 4369 MB
Killed

메모리 사용량이 가장 높은 프로그램은 이제 자동으로 종료되며 시스템은 항상 응답합니다. 서비스 유형에 대한 실시간 로그를 보려면 journalctl -f -u earlyoom다음과 같이 표시됩니다.

-- Logs begin at Mon 2014-11-03 10:54:39 WIB. --
Feb 20 13:25:25 s497 earlyoom[20041]: earlyoom v0.3-15-g528196e
Feb 20 13:25:25 s497 earlyoom[20041]: total:  7800 MiB
Feb 20 13:25:25 s497 earlyoom[20041]: min:     780 MiB
Feb 20 13:25:25 s497 earlyoom[20041]: avail:  4963 MiB
Feb 20 13:33:10 s497 earlyoom[20041]: Out of memory! avail: 519 MiB < min: 780 MiB
Feb 20 13:33:10 s497 earlyoom[20041]: Killing process 24984 (munch)

Ctrl+C명령을 닫으려면 누르세요 .

답변2

내 컴퓨터 중 여러 대에서 동일한 문제가 발생했습니다. 마치 Linux가 스왑 영역을 추가했다는 사실을 인식하지 못하는 것 같습니다.

해결책: 커널을 3.x에서 4.x로 업그레이드하십시오.

관련 정보