Vad är ett ”segmenteringsbrott”?

Bakgrund
Moderna maskinvaror för allmänna ändamål innehåller en ”minneshanteringsenhet” (MMU). Denna maskinvarufunktion används av operativsystem som Linux för att implementera minnesskydd, dvs. för att förhindra att olika processer får tillgång till eller ändrar varandras minne (utom på ett strikt kontrollerat sätt genom specifika API:er). Detta förenklar felsökning och ökar motståndskraften eftersom processerna är noggrant inneslutna och separerade från varandra.
En signal om ”segmenteringsöverträdelse” skickas till en process för vilken minneshanteringsenheten har upptäckt ett försök att använda en minnesadress som inte tillhör den.
Sammanfallande orsak: programmeringsfel
Om en process försöker få tillgång till minnet genom en pekare som inte har initialiserats på rätt sätt, eller som pekar på minne som tidigare har avallokerats, kommer detta troligen att resultera i ett segmenteringsfel. I det här fallet uppstår segfelet med en specifik process eller binär fil, eventuellt under specifika omständigheter.
För att hantera den här typen av segfel bör du börja med att tillämpa alla relevanta service packs och underhållsuppdateringar. Om problemet fortfarande kan reproduceras med nuvarande kod, försök sedan att fånga upp en dump av programkärnan för analys. Detaljer för detta finns i TID 3054866 – How to obtain application core dumps.
Om den problematiska binärfilen levereras av Novell som en del av produkten, öppna en serviceförfrågan hos Novells tekniska tjänster, med

  • en beskrivning av omständigheterna under vilka core-dump genererades,
  • en supportconfig -v-rapport för det drabbade systemet (supportconfig-hemsida), och
  • själva core-dumpfilen, om den är mindre än 50 MB. Om den är större, vänta på att serviceförfrågan tilldelas en tekniker och samarbeta sedan med teknikern för att överföra den.

Om den problematiska binärfilen levererades av en tredje part, kontakta den partens supportavdelning för att få hjälp.
Gemensam orsak: felmatchad binärfil och felmatchade bibliotek
Segfel kan uppstå med processer som kombinerar binärfiler och delade bibliotek som inte är (helt) kompatibla. Detta kan till exempel inträffa när ett bibliotek uppdateras på ett sätt som ändrar bibliotekets ABI (application binary interface), men bibliotekets interna versionsnummer inte uppdateras för att återspegla detta. En binär fil som byggts mot en äldre version av biblioteket kan börja göra segfel när den laddas mot den nyare versionen.
Detta fall kan vara svårt att känna igen, och det finns ingen steglista för hur man hanterar det. När detta fall misstänks är några saker att tänka på:

  • Kontrollera systemet för filkorruption (t.ex. med hjälp av filen rpm-verify.txt i en supportconfig -v-rapport)
  • Kontrollera systemets inställningar som rör delade bibliotek, t.ex. konfigurationsfilerna /etc/ld.so.conf och /etc/ld.so.conf.d/* samt miljövariablerna LD_LIBRARY_PATH och LD_PRELOAD.
  • Användning av verktyget objdump för att kontrollera om det i binärfilen finns en överstyrning av sökvägen för inbyggda bibliotek (RPATH).

Vanlig orsak: problem med maskinvara eller maskinvarukonfiguration
När segfelen inträffar ofta, eller med olika processer eller utan ett tydligt mönster, kan det tyda på att systemets maskinvara (minnessubsystem) är problematisk, eller att systemkonfigurationsinställningarna på låg nivå är olämpliga. Se TID 3301593 – Linuxsystemet hänger eller är instabilt för mer information om hur man hanterar denna situation.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *