it-swarm-ko.tech

스왑 파티션을 테스트하는 방법

헤드리스 서버에서 임의의 세그 폴트를 진단하려고하는데, 궁금해 보이는 한 가지는 메모리 부족 상태에서만 발생하는 것 같고 스왑 크기가 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
23
joshperry

이것이 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로 실행할 수 있습니다.

프로덕션 머신에서는이 작업을 수행하지 않습니다.

31
Steven D