A Linux/Unix rendszereknél gyakran lehet találkozni a core dump állományokkal. Ezek olyan filek, amik akkor jönnek létre, ha valamilyen alkalmazás, vagy akár az egész rendszer meghal. A Core Dump az adott hiba idején elérhető teljes memória térkép archivált verziója. Ezek után ezeket lehet elemezni minden féle feltétel szerint, hogy kiderüljön mi vezetett a process vagy a teljes rendszer végzetes hibájához.
Én most Solaris 10 alatt fogom bemutatni, hogy is működik ez.
Készítsünk Core Dump-okat
Az első lépés természetesen, hogy legyen mit analizálni. Ehhez a coreadm/dumpadm nevű smf service-t kell megfelelően beállítani.
# coreadm
# dumpadm
Ezek az alapértelmezett beállítások, amik valószínűleg jók is lesznek. Arra ügyeljünk, hogy dump deviceként alapból a SWAP adódik meg, amivel majd nem lehet LIVE dumpokat csinálni. Így ha tehetjük dedikáljunk erre a célra külön device-t. Illetve arra ügyeljünk még, hogy Savecore directory-n lévő path elég kapacitással bírjon. Esetenként több tíz gigányi core dump is létrejöhet. Ha pedig nincs elég hely, akkor ez nem fog megtörténni.
Ha tesztelni akarjuk, hogy rendszerünk képes lesz-e egy meghibásodás során core dump file-t létrehozni, akkor csinálhatunk magunk is manuálisan ilyen állományt. Adjuk ki a következő parancsot:
# savecore -v -L
Ekkor hasonló állományok fognak létrejönni. Egy unix.x és egy vmcore.x file. Ezek párban fognak valamit érni. Ahogy látszik is ezen a gépen aktuális memória térkép mérete közel 10GB volt.
Core Dump elemzés
Természetesen ha a rendszerünk pánikol, elérhetetlenné válik, újraindul, az első kérdés amit mindenki feltesz, hogy mi váltotta azt ki. A második pedig, hogy, hogyan is lehetne ezt megelőzni.
Amennyiben egy ilyen eset után létrejött core dump file, akkor már csak az a kérdés ezt a temérdek, bináris memóriakép állományt, hogy is tudnánk elemezni.
mdb – modular debugger
Az mdb csak tool, ami használható erre a célra. Ez alapból elérhető a rendszeren. Tehát nézzük ennek a segítségével milyen információkat nyerhetünk ki, egy rendszer meghibásodás esetén.
A következő paranccsal kell megadni, hogy melyik unix és melyik vmcore file párost kívánjuk elemezni.
# mdb -k unix.2 vmcore.2
Mint látszik, az mdb egy külön interface-t fog betölteni számunkra az elemzéshez. Ez mutatja a prompt megváltoztatása is. A Loading modules-nél pedig felsorola láthatjuk azokat a modulokat, amiket majd core dump elemzése során fel tudunk használni.
Minden modul sajátos lekérdezésekkel bír, így teljesen aprólékos elemzésekbe is bele lehet menni. Én nem kívánok most ennyire mély bemutatót adni az mdb tudásáról, csupán egy felszínes bemutatót.
Tehát induljunk ki abból a tényből, hogy a rendszerünk újraindult, vagy lefagyott, és ennek okát szeretnénk kideríteni.
Az első hasznos parancs, amit ki tudunk adni az a:
> ::status
Itt egy egyszerű összefoglalóban láthatjuk, hogy milyen, melyik rendszer, milyen core dump file-jának információit fogjuk tudni elemezni. Ami még itt hasznos lehet az a panic message. Ezzel a hibaüzenettel szállt el a gépünk.
A következő nagyon hasznos és rávezető parancs a:
> ::msgbuf
Ez a parancs a „messages buffer” állapotát jeleníti meg, egészen a hibáig. Gyakorlatilag egy szöveges log, amiből sok hasznosat tudhatunk meg.
A következő paranccsal magáról a panic okáról tudhatunk meg többet.
> ::panicinfo
Ebből is az első három sor ami egy kicsit hasznosabb. Láthatjuk melyik processzoron, melyik szál váltotta ki a hibát, és persze megint a pánik üzenetét. Ezek alatt pedig regiszterek értékeit jeleníti meg a rendszer.
A következő parancs, nagyon fontos információkat jeleníthet meg:
> ::ps
Lehetőségünk van látni az adott pillanatban futó processeket.
Sőt ezzel a paranccsal még grepelhetünk is tetszőleges stringeket:
> ::pgrep sendmail
Sőt megközelíthetjük fordított nézetből is, hogy aktuálisan a CPU milyen szálakat, milyen processeket dolgozott fel.
> ::cpuinfo
Illetve részletesebb, vizálisabb információt is nyerhetünk ugyan erről:
> ::cpuinfo -v
Solaris CAT (Crach Analysis Tool)
Létezik egy Solaris CAT alkalmazás. Az újabb Solaris 10-eken már elérhető alapból. Amennyiben nem, akkor külön is telepíthető a telepítő csomag.
Amennyiben telepítve van, akkor a /opt/SUNWscat/ alatt találhatóak meg a megfelelő állományok.
A futtatásához, menjünk arra a pathra, ahol a core dumpk elérhetőek. Majd a 0-s core dump betöltéséhez használjuk a következő parancsot:
# /opt/SUNWscat/bin/scat 0
A mdb-hez hasonlóan, itt is betölti a CAT a file-t és egy speciális interface-t nyújt a feldolgozásához. Láthatjuk, hogy a CAT egy kicsit informatívabb már.
A help parancsot kiadva, a CAT sokkal szervezettebb és jól felépített szerkezetet mutat. Gyakorlatilag, minden féle információt ki tudunk nyerni, a gépünk akkori állapotáról.
Akkor nézzünk pár hasznos parancsot:
> analyze
> coreinfo
Mindkét parancs magáról a core file-ról ad vissza információkat.
> panic
A panic körülményeiről ad vissza információkat.
> msgbuff
> tunables
Ez egy elég érdekes, és fontos parancs. Ugyanis a CAT javaslatokat fog tenni, a rendszerünk optimalizálásával kapcsolatban. Milyen paramétereket lehetne állítani, miről, mire, és néhány soros indoklást ezzel kapcsolatban.
Összefoglalás
A bemutatott alap, és speciális Solaris toolon túl, természetesen rengeteg egyéb alkalmazást is használhatunk. Ahogy látszik, rengeteg adat érhető el, egy ilyen core dump file-ban. Illetve rengeteg parancs, funkció ezek elemzésére. Sok esetben a kinyert adatok elég mély, sokszor fejlesztési ismereteket is igényelnek. Remélem sikerült a cikk által egy átfogó bemutatót adni, és ezzel sok hasznos információhoz segíteni a merész Solaris adminisztrátor olvasókat.
Tetszetős, hasznos írás; csak megköszönni tudom.