헤드리스 서버에서 임의의 세그 폴트를 진단하려고하는데, 궁금해 보이는 한 가지는 메모리 부족 상태에서만 발생하는 것 같고 스왑 크기가 0을 초과하지 않는다는 것입니다.
내 컴퓨터가 제대로 작동하는지 확인하기 위해 강제로 교체하려면 어떻게해야합니까?
orca ~ # free
total used free shared buffers cached
Mem: 1551140 1472392 78748 0 333920 1046368
-/+ buffers/cache: 92104 1459036
Swap: 1060280 0 1060280
orca ~ # swapon -s
Filename Type Size Used Priority
/dev/sdb2 partition 1060280 0 -1
이것이 Linux입니까? 그렇다면 다음을 시도 할 수 있습니다.
# sysctl vm.swappiness=100
그런 다음 RAM을 많이 사용하는 프로그램을 사용하거나 RAM 만 차지하는 작은 응용 프로그램을 작성합니다. 다음은이를 수행합니다 (출처 : 실험 및 재미 Linux 디스크 캐시 ) :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.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, 1, 1024*1024);
mb++;
printf("Allocated %d MB\n", mb);
sleep(1);
}
return 0;
}
Linux 가상 메모리 관리자가 실제로 RAM 그렇지 않은 경우)를 할당하지 않을만큼 똑똑 할 수 있기 때문에 0이 아닌 1로 블록을 초기화하도록 memset 라인을 코딩했습니다. 저는 sleep (1)을 추가했습니다. 램과 스왑을 먹으면서 프로세스를 볼 수있는 더 많은 시간을 제공합니다. OOM 킬러는 RAM 및 프로그램에 제공하기 위해 SWAP이 종료되면이를 죽여야합니다. 다음으로 컴파일 할 수 있습니다.
gcc filename.c -o memeater
여기서 filename.c는 위의 프로그램을 저장 한 파일입니다. 그런 다음 ./memeater로 실행할 수 있습니다.
프로덕션 머신에서는이 작업을 수행하지 않습니다.