it-swarm-es.tech

Cómo probar la partición de intercambio

Estoy tratando de diagnosticar algunos fallos aleatorios en un servidor sin cabeza y una cosa que parece curiosa es que solo parecen ocurrir bajo presión de memoria y mi tamaño de intercambio no superará 0.

¿Cómo puedo forzar a mi máquina a cambiar para asegurarse de que funciona correctamente?

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

¿Es esto Linux? Si es así, puede intentar lo siguiente:

# sysctl vm.swappiness=100

Y luego usa uno o varios programas que usan muchos RAM o escribe una pequeña aplicación que solo consume RAM. Lo siguiente hará eso (fuente: Experimentos y diversión con la caché de disco de 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;
}

Codificó la línea de memset para inicializar bloques con 1s en lugar de 0s, porque el administrador de memoria virtual de Linux puede ser lo suficientemente inteligente como para no asignar ningún RAM de lo contrario. Agregué el sleep (1) para le da más tiempo para ver los procesos a medida que engulle ram y swap. El asesino de OOM debería matar esto una vez que esté fuera de RAM y SWAP para dar al programa. Puede compilarlo con

gcc filename.c -o memeater

donde filename.c es el archivo en el que guarda el programa anterior. Luego puede ejecutarlo con ./memeater.

No haría esto en una máquina de producción.

31
Steven D