Como testar a partição swap

21

Estou tentando diagnosticar alguns segfaults aleatórios em um servidor sem cabeçalho e uma coisa que parece curiosa é que eles só parecem acontecer sob pressão de memória e meu tamanho de swap não vai além de 0.

Como posso forçar minha máquina a trocar para ter certeza de que está funcionando corretamente?

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
    
por joshperry 29.08.2010 / 19:42

1 resposta

26

Isso é linux? Se assim você poderia tentar o seguinte:

# sysctl vm.swappiness=100

E, em seguida, use um programa que use muita memória RAM ou grave um pequeno aplicativo que consuma apenas RAM. O seguinte fará isso (fonte: link ):

#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;
}

Eu adicionei o sleep (1) para dar a você mais tempo para observar os processos enquanto ele engole e troca. O assassino de OOM deve matar isso quando você estiver sem RAM e SWAP para dar ao programa. Você pode compilar com

gcc filename.c -o memeater

onde filename.c é o arquivo no qual você salva o programa acima. Então você pode executá-lo com ./memeater.

Eu não faria isso em uma máquina de produção.

    
por 29.08.2010 / 21:17

Tags