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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.