저는 커널을 사용하고 ArchLinux
있는데 3.18.6-1
소프트웨어가 실제 메모리보다 더 많은 메모리를 사용하는 경우(총 메모리 사용량이 5.8
GB를 초과하는 경우) 항상 지연되고 응답하지 않으며 제가 할 수 있는 일은 컴퓨터를 재설정하는 것뿐입니다. 나는 swap
충분히 큰 것을 제공했다/etc/fstab
/swapfile swap swap defaults 0 0
내 것은 명령의 출력 vm.swappiness
입니다 .1
free -m
total used free shared buff/cache available
Mem: 7800 3059 688 239 4053 4204
Swap: 10247 0 10247
교환성을 증가시킨 10
다음 메모리를 많이 차지하는 프로그램을 실행 해 보았습니다.munch
. 씨
하지만 4000
MB 정도에 도달하면 항상 멈춥니다.
내 리눅스에 무슨 문제가 있나요?
아니면 가장 많은 메모리를 사용하는 프로그램을 자동으로 종료하는 방법이 있습니까? (이것은 아마도 가장 최근에 실행된 프로그램이자 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로 업그레이드하십시오.