next up previous contents index
Next: Die Konsistenz des Up: Systemverwaltung Previous: Abstürzende Programme und

Systemabsturz

Was für die Anwenderprogramme gilt, ist auch für den Kernel selbst nicht verkehrt. Auch wenn der Linux-Kernel eine beachtliche Stabilität erreicht hat und auf vielen Systemen unter hoher Last wochenlang ohne Unterbrechung läuft, kann das Betriebssystem nicht auf alle möglichen Ausnahmen vorbereitet sein, und es enthält auch Fehler. Ein Fehler des Betriebssystem ist nicht so leicht abzufangen wie der eines Anwenderprogramms. In einem solchen Fall kommt es häufiger zu einem Systemabsturz; manchmal in Form eines ''Kernel Panicßystemhalts, manchmal zu einem Reset, manchmal zu einem kompletten Systemstillstand.

Wenn sich ein Systemabsturz irgendwie ankündigt, indem beispielsweise das System immer langsamer wird, obwohl kein rechenzeitintensives Programm läuft, können Sie versuchen, den Rechner mit einem halt-Kommando anzuhalten und so den Schaden zu begrenzen. In jedem Fall sollten Sie alle normale Benutzeraktivität am Rechner beenden und häufig das sync-Kommando ausführen.

Wenn der unerfreuliche Fall eines echten Systemabsturzes eingetreten ist, erscheint meistens eine Meldung der folgenden Form auf dem Bildschirm:

unable to handle kernel paging request at address C0000010
Oops: 0002
EIP:   0010:00118348
EFLAGS: 00000246
eax: fffffffd   ebx: 00000000   ecx: 00000216   edx: 000003d5
esi: 00105816   edi: 0016709f   ebp: 001756f8
ds: 002b  es: 002b  fs: 002b  gs: 002b
Pid: 00, process nr: 00
89 50 04 c7 03 00 00 00 00 c7
Aus der Fehlermeldung in der ersten Zeile kann geschlossen werden, daß eine Kernelfunktion versucht hat, auf die Speicheradresse 0x010 zuzugreifen. Weil der Kernel in den logischen Speicherbereich über ein Gigabyte (0xC0000000) verschoben ist, erscheint die Adresse mit diesem Offset.

In der zweiten Zeile erscheint eine weitere Fehlermeldung und ein Fehlercode. Die Oops Meldung aus diesem Beispiel ist typisch für Fehler des Memory-Management. Die Fehlernummer kann weiteren Aufschluß über die Ursache des Absturzes geben; um sie zu entschlüsseln, müssen Sie die Kernelsourcen heranziehen.

Der Extended Instruction Pointer EIP zum Zeitpunkt des Fehlers läßt Rückschlüsse auf die Kernelfunktion zu, die für den Absturz verantwortlich ist. Sie können den Namen der Funktion herausfinden, indem Sie die Symboltabelle des Kernels nach der diese Adresse umfassenden Funktion durchsuchen. Das folgende Kommando erledigt diese Aufgabe:

# nm /usr/src/linux/tools/zSystem | sort | grep 00118...
00118294 t _try_to_free_page
00118324 T _free_page
0011847c T ___get_free_page
00118638 t _try_to_unuse
0011878c T _sys_swapoff
00118934 T _sys_swapon
00118c64 T _si_swapinfo
00118cf4 T _do_mmap
00118cf4 t ___gnu_compiled_c
00118cf4 t gcc2_compiled.
00118cf4 t mmap.o
00118ec4 T _sys_mmap
00118f50 T _unmap_fixup
# _
Aus dieser Liste läßt sich die verantwortliche Funktion, in diesem Beispiel free_page,gif leicht herausfinden.

Die EFLAGS und die in den darauffolgenden Zeilen aufgelisteten Inhalte der Prozessorregister können im Einzelfall zur genauen Bestimmung der Fehlerursache ebenso herangezogen werden wie die Maschinencode-Sequenz in der letzten Zeile.



next up previous contents index
Next: Die Konsistenz des Up: Systemverwaltung Previous: Abstürzende Programme und



Linux Anwenderhandbuch -- Copyright 1993, 1994, 1995 S. Hetze, D. Hohndel, O. Kirch, M. Müller