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


23

헤드리스 서버에서 임의의 segfault를 진단하려고하는데 궁금한 점은 메모리 부족 상태에서만 발생하고 스왑 크기가 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

kern.logsegfaults에 메시지가 있습니까? oom-killer시스템에 가상 메모리가 충분하지 않다는 메시지 가 표시되면 스왑이 사용되지 않을 수 있습니다. 이것은 가상화 된 서버입니까? 그리고 어떤 종류입니까?
Gilles 'SO- 악마 그만해'

로그에 oom-killer 항목이 없으므로 segfault at 54 ip b7619ba8 sp bf9c3380 error 4추적하기가 어려울 하드웨어 문제라고 생각합니다. 듀얼 Athlon MP 2000+ 프로세서와 1.5GB RAM이 장착 된 물리적 서버입니다. 상당히 안정적으로 실행되지만 컴파일 중에는 segfaults입니다.
joshperry

1
글쎄, 케이스 팬이 연결되어 있지 않아 서버가 프로세서를 과도하게 사용하여 프로세서를 많이 사용하기 시작했을 때 문제가 발생했습니다.
joshperry

답변:


30

이거 리눅스 야? 그렇다면 다음을 시도해보십시오.

# sysctl vm.swappiness=100

그런 다음 많은 RAM을 사용하는 프로그램을 사용하거나 램을 소비하는 작은 응용 프로그램을 작성하십시오. 다음은 그렇게 할 것입니다 (출처 : http://www.linuxatemyram.com/play.html ) :

#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);
        mb++;
        printf("Allocated %d MB\n", mb);
        sleep(1);
    }      
return 0;
}

램을 교체하고 스왑 할 때 프로세스를 볼 시간을 더주기 위해 sleep (1)을 추가했습니다. OOM 킬러는 RAM과 SWAP가 부족하여 프로그램에 제공하면 이것을 제거해야합니다. 당신은 그것을 컴파일 할 수 있습니다

gcc filename.c -o memeater

여기서 filename.c는 위 프로그램을 저장 한 파일입니다. 그런 다음 ./memeater로 실행할 수 있습니다.

나는 생산 기계에서 이것을하지 않을 것입니다.


고마워, 그것은 메모리를 고치고 교환을 시작하는 데 효과적이었습니다. 내 segfaults는 다른 것에 기인 한 것 같아요 ... 아마 하드웨어 : /
joshperry

리눅스의 경우, /proc/self/oom_score_adj아마도 OOM-killer 피해자가 될 가능성을 높이기 위해 글을 써서 시작하는 것이 유용 할 수 있습니다 .
Gert van den Berg

2
<unistd.h>잠 을 포함해야합니다 . 그렇지 않으면 경고가 나타납니다warning: implicit declaration of function ‘sleep’;
Debanjan Basu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.