Was ist eine „Segmentierungsverletzung“?

Hintergrund
Moderne Allzweck-Hardware enthält eine „Memory Management Unit“ (oder MMU). Diese Hardwarefunktion wird von Betriebssystemen wie Linux verwendet, um Speicherschutz zu implementieren, d. h. um zu verhindern, dass verschiedene Prozesse auf den Speicher des jeweils anderen zugreifen oder ihn verändern (außer auf streng kontrollierte Weise über spezifische APIs). Dies vereinfacht die Fehlersuche und erhöht die Ausfallsicherheit, da die Prozesse sorgfältig voneinander getrennt sind.
Ein „Segmentation Violation“-Signal wird an einen Prozess gesendet, bei dem die Speicherverwaltungseinheit den Versuch festgestellt hat, eine Speicheradresse zu verwenden, die nicht zu ihm gehört.
Häufige Ursache: Programmierfehler
Wenn ein Prozess versucht, über einen Zeiger auf Speicher zuzugreifen, der nicht ordnungsgemäß initialisiert wurde oder der auf Speicher verweist, der zuvor freigegeben wurde, führt dies wahrscheinlich zu einem Segfault. In diesem Fall tritt der Segfault bei einem bestimmten Prozess oder einer bestimmten Binärdatei auf, möglicherweise unter bestimmten Umständen.
Um diese Art von Segfault zu beheben, sollten Sie zunächst alle relevanten Service Packs und Wartungsupdates einspielen. Wenn das Problem dann immer noch mit dem aktuellen Code reproduzierbar ist, versuchen Sie, einen Kerndump der Anwendung zur Analyse zu erfassen. Einzelheiten hierzu finden Sie in TID 3054866 – How to obtain application core dumps.
Wenn die problematische Binärdatei von Novell als Teil des Produkts ausgeliefert wird, öffnen Sie eine Service-Anfrage bei den technischen Diensten von Novell und fügen Sie

  • eine Beschreibung der Umstände, unter denen der Core-Dump generiert wurde,
  • einen supportconfig -v-Bericht für das betroffene System (supportconfig-Homepage) und
  • die Core-Dump-Datei selbst, falls sie kleiner als 50 MB ist. Wenn sie größer ist, warten Sie, bis die Service-Anfrage einem Techniker zugewiesen wird, und arbeiten Sie dann mit dem Techniker zusammen, um sie zu übertragen.

Wenn die problematische Binärdatei von einem Drittanbieter geliefert wurde, wenden Sie sich an dessen Support-Abteilung, um Hilfe zu erhalten.
Häufige Ursache: nicht übereinstimmende Binärdateien und Bibliotheken
Segfaults können bei Prozessen auftreten, die Binärdateien und gemeinsam genutzte Bibliotheken kombinieren, die nicht (vollständig) kompatibel sind. Dies kann z.B. vorkommen, wenn eine Bibliothek so aktualisiert wird, dass sich die ABI (Application Binary Interface) der Bibliothek ändert, aber die interne Versionsnummer der Bibliothek nicht aktualisiert wird, um dies widerzuspiegeln. Eine Binärdatei, die mit einer älteren Version der Bibliothek erstellt wurde, kann zu Fehlern führen, wenn sie mit der neueren Version geladen wird.
Dieser Fall kann schwer zu erkennen sein, und es gibt keine Schrittliste für die Behandlung dieses Falls. Wenn dieser Fall vermutet wird, sind einige Dinge in Betracht zu ziehen:

  • Überprüfen des Systems auf Dateibeschädigung (z.B. mit der Datei rpm-verify.txt in einem supportconfig -v Bericht)
  • Überprüfen der Systemeinstellungen, die sich auf Shared Libraries beziehen, wie die Konfigurationsdateien /etc/ld.so.conf und /etc/ld.so.conf.d/* und die Umgebungsvariablen LD_LIBRARY_PATH und LD_PRELOAD.
  • Mit dem objdump-Tool kann die Binärdatei auf einen eingebauten Suchpfad für Bibliotheken (RPATH) überprüft werden.

Häufige Ursache: Hardware- oder Hardwarekonfigurationsprobleme
Wenn Seg-Fehler häufig, bei verschiedenen Prozessen oder ohne klares Muster auftreten, kann dies ein Hinweis darauf sein, dass die Hardware des Systems (Speichersubsystem) problematisch ist oder dass die Einstellungen der Systemkonfiguration auf niedriger Ebene ungeeignet sind. Bitte lesen Sie TID 3301593 – Linux-System hängt oder ist instabil für weitere Informationen über den Umgang mit dieser Situation.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.