Solaris Crash Dump Analyse für Anfänger

Also man kanns wie die Profis machen und quasi Source Code neben Crash Dump legen und den Fehler genau diagnostizieren. Oder wie einige Kollegen ausm MCSC, bei denen ich kein bisschen überrascht wäre und “Ja, okay” sagen würde, wenn die durch Handauflegen auf den Rechner die Ursache für einen Kernel Panic finden. Für alle anderen gibt es einen viel einfacheren Weg, mit dem man zumindestens vernünftig in Bug Databases suchen kann. Ich nehme hier mal den vor einigen Tagen beschrieben Fall des Kernel Panics bei Planet3Dnow. Zunächstmal muss man einen Debugger starten. Ich empfehle hier den mdb:

bash-3.00# mdb -k unix.4 vmcore.4
Loading modules: [ unix krtld genunix specfs dtrace cpu.AuthenticAMD.15 uppc pcplusmp ufs md ip sctp usba fcp fctl nca lofs cpc fcip random crypto zfs logindmux ptm sppp nfs ipc ]

Beim Prompt gibt man dann einfach $C ein, um einen Stacktrace zu erhalten:

> $C
fffffe80000b9650 vpanic()
fffffe80000b9670 0xfffffffffb840459()
fffffe80000b96e0 segmap_unlock+0xe5()
fffffe80000b97a0 segmap_fault+0x2db()
fffffe80000b97c0 snf_smap_desbfree+0x76()
fffffe80000b97e0 dblk_lastfree_desb+0x17()
fffffe80000b9800 dblk_decref+0x66()
fffffe80000b9830 freeb+0x7b()
fffffe80000b99b0 tcp_rput_data+0x1986()
fffffe80000b99d0 tcp_input+0x38()
fffffe80000b9a10 squeue_enter_chain+0x16e()
fffffe80000b9ac0 ip_input+0x18c()
fffffe80000b9b50 i_dls_link_ether_rx+0x153()
fffffe80000b9b80 mac_rx+0x46()
fffffe80000b9bd0 bge_receive+0x98()
fffffe80000b9c10 bge_intr+0xaf()
fffffe80000b9c60 av_dispatch_autovect+0x78()
fffffe80000b9c70 intr_thread+0x50()

Jetzt streicht man am Anfang alles weg, was irgendwie zum Thema Betriebsysteminfrastruktur im Fehlerfalle zählt. Also vpanic() erzeugt den Panic. Die zweite Zeile kann auch weg. Die Beiden segmap-Zeilen sind auch durch den Fehler verursacht, aber keine Fehlerursache. Die für uns interessante Zeile ist also snf_smap_desbfree Mit diesem Suchwort geht man dann entweder zu Sunsolve oder bugs.opensolaris.org Und et voilá : System panic due to recursive mutex_enter in snf_smap_desbfree trying to re-aquire Tx mutex. Gibt man das ganze auf Sunsolve in den PatchFinder ein, kommt man sogar sehr schnell zum sehr wahrscheinlich passenden Patch: 124255-03 Noch zwei Hinweise: