Co je to „porušení segmentace“?

Základní informace
Moderní hardware pro všeobecné použití obsahuje „jednotku správy paměti“ (MMU). Tuto hardwarovou funkci využívají operační systémy, jako je Linux, k implementaci ochrany paměti, tj. k zabránění různým procesům, aby vzájemně přistupovaly k paměti nebo ji upravovaly (s výjimkou přísně řízeného způsobu prostřednictvím specifických rozhraní API). To zjednodušuje řešení problémů a zvyšuje odolnost, protože procesy jsou od sebe pečlivě izolovány a odděleny.
Signál „porušení segmentace“ je vyslán procesu, u kterého jednotka správy paměti zjistila pokus o použití adresy paměti, která mu nepatří.
Obvyklá příčina: programátorská chyba
Pokouší-li se proces přistupovat k paměti prostřednictvím ukazatele, který nebyl správně inicializován nebo který ukazuje na paměť, která již byla dříve dealokována, pravděpodobně to vyústí v segfault. V tomto případě se segfault vyskytuje u konkrétního procesu nebo binárního souboru, případně za konkrétních okolností.
Chcete-li se vypořádat s tímto typem segfaultu, začněte aplikací všech příslušných servisních balíčků a aktualizací údržby. Dále, pokud je problém stále reprodukovatelný se současným kódem, zkuste zachytit výpis jádra aplikace pro analýzu. Podrobnosti k tomuto postupu naleznete v dokumentu TID 3054866 – Jak získat výpisy jádra aplikace.
Pokud je problematická binárka dodávána společností Novell jako součást produktu, otevřete servisní požadavek u technických služeb společnosti Novell a dodejte

  • popis okolností, za kterých byl výpis jádra generován,
  • zprávu supportconfig -v pro postižený systém (domovská stránka supportconfig) a
  • samotný soubor výpisu jádra, pokud je menší než 50 MB. Pokud je větší, vyčkejte, až bude požadavek na službu přidělen technikovi, a poté s ním spolupracujte na jeho přenosu.

Pokud problematickou binárku dodala třetí strana, obraťte se o pomoc na oddělení podpory této strany.
Obvyklá příčina: nesoulad binárky a knihoven
Segfaulty mohou nastat u procesů, které kombinují binárky a sdílené knihovny, které nejsou (plně) kompatibilní. K tomu může dojít například tehdy, když je knihovna aktualizována způsobem, který změní její ABI (aplikační binární rozhraní), ale interní číslo verze knihovny není aktualizováno tak, aby to zohledňovalo. Binární soubor, který byl sestaven proti starší verzi knihovny, může při načtení proti novější verzi začít selhávat.
Tento případ může být obtížné rozpoznat a neexistuje žádný seznam kroků pro jeho řešení. Při podezření na tento případ je třeba zvážit několik věcí:

  • Kontrola systému na poškození souborů (např. pomocí souboru rpm-verify.txt v hlášení supportconfig -v)
  • Kontrola nastavení systému, která se týkají sdílených knihoven, jako jsou konfigurační soubory /etc/ld.so.conf a /etc/ld.so.conf.d/* a proměnné prostředí LD_LIBRARY_PATH a LD_PRELOAD.
  • Pomocí nástroje objdump zkontrolujte, zda v binárním souboru není nadefinována cesta pro vyhledávání vestavěných knihoven (RPATH).

Běžná příčina: problém s hardwarem nebo hardwarovou konfigurací
Pokud se segfaulty objevují často nebo s různými procesy nebo bez jasného vzoru, může to znamenat, že hardware systému (paměťový subsystém) je problematický nebo že nastavení konfigurace systému na nízké úrovni jsou nevhodná. Další informace o řešení této situace naleznete v dokumentu TID 3301593 – Systém Linux visí nebo je nestabilní.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *