Ce este o „încălcare a segmentării”?

Principiu
Hardware-ul modern de uz general include o „unitate de gestionare a memoriei” (sau MMU). Această caracteristică hardware este utilizată de sisteme de operare precum Linux pentru a implementa protecția memoriei, adică pentru a împiedica diferite procese să acceseze sau să modifice memoria celuilalt (cu excepția unui mod strict controlat prin intermediul unor API-uri specifice). Acest lucru simplifică depanarea și sporește rezistența, deoarece procesele sunt atent conținute și separate unele de altele.
Un semnal de „încălcare a segmentării” este trimis unui proces a cărui unitate de gestionare a memoriei a detectat o încercare de utilizare a unei adrese de memorie care nu îi aparține.
Cauză comună: eroare de programare
Dacă un proces încearcă să acceseze memoria printr-un pointer care nu a fost inițializat corespunzător sau care indică o memorie care a fost anterior dezalocată, acest lucru va duce probabil la o eroare de segmentare. În acest caz, segfault-ul are loc cu un proces sau un binar specific, posibil într-un set specific de circumstanțe.
Pentru a rezolva acest tip de segfault, începeți prin a aplica toate pachetele de servicii și actualizările de întreținere relevante. Apoi, dacă problema este în continuare reproductibilă cu codul actual, încercați să capturați o copie de rezervă a nucleului aplicației pentru analiză. Detalii în acest sens se găsesc în TID 3054866 – How to obtain application core dumps.
Dacă binarul problematic este livrat de Novell ca parte a produsului, deschideți o cerere de service la serviciile tehnice Novell, furnizând

  • o descriere a circumstanțelor în care a fost generat core dump-ul,
  • un raport supportconfig -v pentru sistemul afectat (pagina de pornire supportconfig) și
  • fișierul core dump în sine, dacă este mai mic de 50 MB. Dacă este mai mare, așteptați ca cererea de service să fie atribuită unui inginer și apoi colaborați cu acesta pentru a o transfera.

Dacă binarul problematic a fost furnizat de o terță parte, contactați departamentul de asistență al acelei părți pentru asistență.
Cauză comună: binare și biblioteci nepotrivite
Segulajele pot apărea cu procese care combină binare și biblioteci partajate care nu sunt (complet) compatibile. Acest lucru se poate întâmpla, de exemplu, atunci când o bibliotecă este actualizată într-un mod care modifică ABI (interfața binară a aplicației) a bibliotecii, dar numărul de versiune internă a bibliotecii nu este actualizat pentru a reflecta acest lucru. Un fișier binar care a fost construit în funcție de o versiune mai veche a bibliotecii poate începe să aibă erori de segregare atunci când este încărcat în funcție de versiunea mai nouă.
Acest caz poate fi dificil de recunoscut și nu există o listă de pași pentru rezolvarea lui. Atunci când se suspectează acest caz, câteva lucruri care trebuie luate în considerare sunt:

  • Verificarea sistemului pentru corupția fișierelor (de exemplu, folosind fișierul rpm-verify.txt într-un raport supportconfig -v)
  • Verificarea setărilor sistemului care se referă la bibliotecile partajate, cum ar fi fișierele de configurare /etc/ld.so.conf și /etc/ld.so.conf.d/* și variabilele de mediu LD_LIBRARY_PATH și LD_PRELOAD.
  • Utilizarea instrumentului objdump pentru a verifica dacă în binar există o suprascriere a căii de căutare a bibliotecilor încorporate (RPATH).

Cauză comună: problemă de hardware sau de configurare hardware
Când erorile de segregare apar frecvent, sau cu procese diferite sau fără un tipar clar, acest lucru poate indica faptul că hardware-ul unui sistem (subsistemul de memorie) este problematic sau că setările de configurare a sistemului la nivel scăzut sunt necorespunzătoare. Vă rugăm să consultați TID 3301593 – Sistemul Linux se blochează sau este instabil pentru mai multe informații despre cum să gestionați această situație.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *