Mi az a “szegmentáció megsértése”?

Háttér
A modern általános célú hardverek tartalmaznak egy “memóriakezelő egységet” (vagy MMU-t). Ezt a hardverfunkciót az operációs rendszerek, például a Linux, arra használják, hogy memóriavédelmet valósítsanak meg, azaz megakadályozzák, hogy különböző folyamatok hozzáférjenek egymás memóriájához vagy módosítsák azt (kivéve szigorúan ellenőrzött módon, speciális API-kon keresztül). Ez leegyszerűsíti a hibaelhárítást és növeli az ellenálló képességet, mivel a folyamatokat gondosan elszigetelik és elkülönítik egymástól.
A “szegmentáció megsértése” jelzést olyan folyamat kapja, amelynek a memóriakezelő egység olyan memóriacím használatára tett kísérletet észlelt, amely nem tartozik hozzá.
Gyakori ok: programozási hiba
Ha egy folyamat olyan mutatón keresztül próbál memóriához jutni, amelyet nem inicializáltak megfelelően, vagy amely olyan memóriára mutat, amelyet korábban már felszabadítottak, akkor ez valószínűleg szegfaultot eredményez. Ebben az esetben a hiba egy adott folyamat vagy bináris program esetében jelentkezik, esetleg meghatározott körülmények között.
Az ilyen típusú hiba kezeléséhez először is alkalmazza az összes vonatkozó szervizcsomagot és karbantartási frissítést. Ezután, ha a probléma még mindig reprodukálható a jelenlegi kóddal, próbáljon meg egy alkalmazásmag dumpot készíteni elemzés céljából. Ennek részletei a TID 3054866 – Hogyan szerezhetünk alkalmazásmag-dumpokat.
Ha a problémás bináris állományt a Novell a termék részeként szállítja, nyisson szervizkérelmet a Novell műszaki szolgálatánál, mellékelve

  • a core dump létrehozásának körülményeit,
  • a supportconfig -v jelentést az érintett rendszerről (supportconfig kezdőlap), és
  • magát a core dump fájlt, ha az kisebb, mint 50 MB. Ha nagyobb, várja meg, hogy a szervizkérelmet egy mérnökhöz rendeljék, majd a mérnökkel együttműködve továbbítsa.

Ha a problémás bináris állományt egy harmadik fél szállította, forduljon annak a félnek a támogatási osztályához segítségért.
Gyakori ok: össze nem illő bináris és könyvtárak
A hibák olyan folyamatoknál fordulhatnak elő, amelyek nem (teljesen) kompatibilis binárisokat és megosztott könyvtárakat kombinálnak. Ez például akkor fordulhat elő, ha egy könyvtárat olyan módon frissítenek, amely megváltoztatja a könyvtár ABI-jét (alkalmazás bináris interfésze), de a könyvtár belső verziószáma nem frissül ennek megfelelően. Egy olyan bináris program, amely a könyvtár egy régebbi verziója ellen készült, hibásodni kezdhet, amikor az újabb verzió ellenében töltődik be.
Ezt az esetet nehéz lehet felismerni, és nincs lépéslista a kezelésére. Ha ez az eset gyanúja merül fel, néhány megfontolandó dolog:

  • A rendszer ellenőrzése fájlrongáltság szempontjából (pl. az rpm-verify.txt fájl használatával egy supportconfig -v jelentésben)
  • A rendszer megosztott könyvtárakkal kapcsolatos beállításainak ellenőrzése, például az /etc/ld.so.conf és /etc/ld.so.so.conf.d/* konfigurációs fájlok és az LD_LIBRARY_PATH és LD_PRELOAD környezeti változók.
  • Az objdump eszköz használatával ellenőrizheti a bináris állományt a beépített könyvtárak keresési útvonalának felülírására (RPATH).

Gyakori ok: hardver- vagy hardverkonfigurációs probléma
Ha a segfaultok gyakran, vagy különböző folyamatokkal, illetve egyértelmű minta nélkül jelentkeznek, ez arra utalhat, hogy a rendszer hardvere (memória alrendszere) problémás, vagy az alacsony szintű rendszerkonfigurációs beállítások nem megfelelőek. Kérjük, olvassa el a TID 3301593 – Linux rendszer akadozik vagy instabil a helyzet kezelésével kapcsolatos további információkat.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük