So testen Sie die Swap-Partition

23

Ich versuche, zufällige Fehler auf einem kopflosen Server zu diagnostizieren, und eine Sache, die merkwürdig erscheint, ist, dass sie nur unter Speicherdruck auftreten und meine Swap-Größe nicht über 0 steigt.

Wie kann ich meinen Computer zum Tauschen zwingen, um sicherzustellen, dass er ordnungsgemäß funktioniert?

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
joshperry
quelle
kern.logBefinden sich zum Zeitpunkt der Segfaults irgendwelche Meldungen in ? Eine Meldung über oom-killerweist darauf hin, dass Ihr System nicht über genügend virtuellen Speicher verfügt. Dies kann bedeuten, dass Swap nicht verwendet wird. Ist das ein virtualisierter Server (und welche Art)?
Gilles 'SO - hör auf, böse zu sein'
Es gibt keine oom-killer-Einträge im Log, nur segfault at 54 ip b7619ba8 sp bf9c3380 error 4solche, von denen ich denke, dass es ein Hardware-Problem ist, das schwer aufzuspüren sein wird. Dies ist ein physischer Server mit zwei Athlon MP 2000+ -Prozessoren und 1,5 GB RAM. Es läuft ziemlich stabil, aber während des Kompilierens treten Fehler auf.
Joshperry
1
Es stellte sich heraus, dass die Gehäuselüfter nicht angeschlossen waren, was Probleme verursachte, wenn der Server anfing, etwas Prozessorintensives zu tun, was zu einer Überhitzung führte.
Joshperry

Antworten:

30

Ist das Linux? Wenn ja, können Sie Folgendes versuchen:

# sysctl vm.swappiness=100

Verwenden Sie dann entweder ein oder mehrere Programme, die viel RAM verwenden, oder schreiben Sie eine kleine Anwendung, die nur RAM auffrisst. Folgendes wird das tun (Quelle: 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;
}

Ich habe sleep (1) hinzugefügt, um Ihnen mehr Zeit zu geben, die Prozesse zu beobachten, während sie RAM verschlingen und tauschen. Der OOM-Killer sollte dies beenden, sobald Sie nicht mehr genügend RAM und SWAP haben, um es dem Programm zu geben. Sie können es mit kompilieren

gcc filename.c -o memeater

Wobei filename.c die Datei ist, in der Sie das obige Programm speichern. Dann können Sie es mit ./memeater ausführen.

Ich würde das nicht auf einer Produktionsmaschine machen.

Steven D
quelle
Danke, das hat gut funktioniert, um Speicher zu verschlingen und zu tauschen. Ich vermute, meine Fehler werden durch etwas anderes verursacht ... wahrscheinlich Hardware: /
Joshperry
Für Linux kann es hilfreich sein, zunächst eine schriftliche /proc/self/oom_score_adjMitteilung zu verfassen , um sicherzustellen, dass es das wahrscheinlichste Opfer eines OOM-Mörders ist ...
Gert van den Berg
2
müssen <unistd.h>für den Schlaf enthalten, sonst wirft es eine Warnungwarning: implicit declaration of function ‘sleep’;
Debanjan Basu