Beheben des Fehlers "Segmentierungsfehler" unter Linux
Der Segmentierungsfehlerfehler (oft nur als Segfault bezeichnet) hängt in der Regel mit einem Speicherproblem zusammen, bei dem ein Prozess versucht, auf nicht zugewiesenen Speicher zuzugreifen, der ihm nicht gehört, und der Linux-Kernel den Prozess beendet und den Fehler ausgibt, um weitere Probleme zu beheben. Es kann schwierig zu diagnostizieren sein und gibt uns in der Regel nicht viel, von dem wir ausgehen können, daher müssen wir uns durch Protokolldateien wühlen und eine Vielzahl von Methoden ausprobieren, um das Grundproblem herauszufinden. In diesem Tutorial gehen wir Schritt für Schritt eine Anleitung durch, um den Segmentierungsfehlerfehler auf einem Linux-System zu beheben.
In diesem Tutorial lernen Sie:
- So überprüfen Sie
dmesgauf Segfault-Einträge - So überprüfen Sie die RAM-Auslastung
Aus persönlicher Erfahrung ist es wahrscheinlicher, dass dieser Fehler auf einem System mit spärlichen Speicherressourcen auftritt. Ein gutes Beispiel ist der Betrieb eines billigen VPS, der nur 1 oder 2 GB RAM hat, und der Versuch, mehrere Dienste gleichzeitig zu hosten. Es ist nicht überraschend, dass in diesem Szenario der
Segfault-Fehler auftritt, da ressourcenarme Prozesse mit größerer Wahrscheinlichkeit Speicher beanspruchen, der einfach nicht verfügbar ist. Beheben des Fehlers "Segmentierungsfehler" unter Linux
Das erste, was wir tun sollten, ist herauszufinden, welches Programm den Fehler verursacht. Sie können die Systemprotokolle nach Hinweisen durchsuchen und sollten insbesondere
dmesgüberprüfen. Sobald Sie wissen, welches Programm das Problem verursacht, können Sie verschiedene Konfigurationen ausprobieren, um es zu verhindern oder, wenn möglich, ganz zu beseitigen. Hier ist ein reales Beispiel von einem Gaming-Server:dmesg [10541938.808655] srcds_linux[14224]: segfault at 0 ip 00000000f73695d9 sp 00000000ffad8b80 error 6 in engine_srv.so[f7165000+32a000]Diese Zeile teilt uns mit, dass das
srcds_linuxProgramm versucht hat, Speicher zuzuweisen, der ihm nicht gehörte, und daher mit einemSegmentierungsfehlerfehlerbeendet wurde. Beachten Sie, dass das Protokoll dies stattdessen alsSegfault-Fehlerbezeichnet, also achten Sie darauf, nach beiden Begriffen zu suchen.Da
Segmentierungsfehlerin der Regel bedeutet, dass uns der nutzbare Speicher ausgeht, den Programme anfordern, können wir mit dem Befehltopoderhtopüberprüfen, welche Prozesse den meisten Speicher belegen. Dadurch erfahren wir, ob ein Prozess mehr Arbeitsspeicher verbraucht, als er sollte, und wir können den Prozess eliminieren oder weitere Schritte unternehmen, um sicherzustellen, dass er über den Speicher verfügt, den er für eine ordnungsgemäße Ausführung benötigt.htopEs gibt viele andere Befehle, die wir zur Überwachung der RAM-Auslastung verwenden können, die wir in diesem Tutorial ausführlich behandeln: So überwachen Sie die RAM-Auslastung unter Linux. Oder Sie können ein Bash-Skript verwenden, um die RAM-Auslastung zu überwachen.
Wenn Sie sicher sind, dass auf Ihrem System viel RAM installiert ist, und Sie keine fehlerhaften Prozesse haben, die versuchen, mehr Speicher zu verbrauchen, als sie sollten, dann könnten Sie den Fehler aufgrund von Fehlern in Ihrem RAM erhalten. Versuchen Sie, ein Fehlerüberprüfungsprogramm wie memtest86 auszuführen, das jeden Teil Ihres installierten RAM überprüft, um festzustellen, ob Fehler vorliegen. Wenn dies der Fall ist, müssen Sie den defekten RAM-Stick ersetzen.
- Eine weitere mögliche Ursache für den
Segmentierungsfehler-Fehlerist ein Softwarefehler. Veraltete Programme oder Programme, die sich in der Beta-Phase befinden, sollten auf aktuelle Versionen aktualisiert werden, um zu sehen, ob das Problem behoben werden kann. Sie können auch online überprüfen, ob andere Benutzer ähnliche Probleme mit derselben Version der Software melden, die Sie ausführen. Wenn Sie das Programm nicht aktualisieren können, können Sie versuchen, ein Debugtool auszuführen, um festzustellen, ob es auf Speicherverluste oder andere Probleme hinweist.
Abschließende Gedanken
In diesem Tutorial haben wir gesehen, wie man den Segmentierungsfehler-Fehler auf einem Linux-System behebt. Dies ist ein frustrierender Fehler, der die meisten Benutzer beim ersten Mal verwirrt, da er uns absolut keine Informationen darüber gibt, was die zugrunde liegende Ursache sein könnte. Sobald Sie feststellen, dass es sich um ein speicherbezogenes Problem handelt, können wir Maßnahmen ergreifen, um sicherzustellen, dass unser System über ausreichend Speicher verfügt, um die Dienste darauf auszuführen, und dass es keine störenden Prozesse gibt, die versuchen, mehr RAM zu verbrauchen, als sie sollten.
