O que é uma “violação de segmentação”?

Background
O hardware de uso geral moderno inclui uma “unidade de gestão de memória” (ou MMU). Este recurso de hardware é usado por sistemas operacionais como Linux para implementar proteção de memória, ou seja, para evitar que diferentes processos acessem ou modifiquem a memória uns dos outros (exceto de forma estritamente controlada através de APIs específicas). Isto simplifica a resolução de problemas e aumenta a resiliência à medida que os processos são cuidadosamente contidos e separados uns dos outros.
Um sinal de “violação de segmentação” é enviado para um processo do qual a unidade de gerenciamento de memória detectou uma tentativa de usar um endereço de memória que não lhe pertence.
Causa comum: erro de programação
Se um processo tentar acessar a memória através de um ponteiro que não foi devidamente inicializado, ou que está apontando para memória que foi previamente desalocada, isto provavelmente resultará em uma falha de segmentação. Neste caso, a segfault está ocorrendo com um processo ou binário específico, possivelmente sob um conjunto específico de circunstâncias.
Para lidar com este tipo de segfault, comece por aplicar todos os service packs relevantes e atualizações de manutenção. A seguir, se o problema ainda for reproduzível com o código atual, tente capturar um dump do núcleo da aplicação para análise. Detalhes sobre isso são encontrados no TID 3054866 – Como obter dump do núcleo da aplicação.
Se o binário problemático for enviado pela Novell como parte do produto, abra uma solicitação de serviço com os serviços técnicos da Novell, fornecendo

  • uma descrição das circunstâncias sob as quais o dump do núcleo foi gerado,
  • um relatório de suporte-config -v para o sistema afetado (página inicial do suporte-config), e
  • o próprio arquivo dump do núcleo, se menor que 50 MB. Se ele for maior, aguarde que a solicitação de serviço seja atribuída a um engenheiro e depois trabalhe com o engenheiro para transferi-lo.

Se o binário problemático foi fornecido por um terceiro, contate o departamento de suporte desse terceiro para obter assistência.
Causa comum: binários e bibliotecas inadequados
Falhas podem ocorrer com processos que combinam binários e bibliotecas compartilhadas que não são (totalmente) compatíveis. Isto pode ocorrer, por exemplo, quando uma biblioteca é atualizada de uma forma que altera a ABI (interface binária da aplicação) da biblioteca, mas o número da versão interna da biblioteca não é atualizado para refletir isto. Um binário que foi construído contra uma versão antiga da biblioteca pode começar a segregar quando carregado contra a versão mais recente.
Este caso pode ser difícil de reconhecer, e não há uma lista de passos para lidar com ele. Quando este caso é suspeito, algumas coisas a considerar são:
ul>

  • Check the system for file corruption (e.g. usando o arquivo rpm-verify.txt em um relatório supportconfig -v)
  • Check the system’s settings that relate to shared libraries, like the /etc/ld.so.conf and /etc/ld.so.conf.d/* configuration files and the LD_LIBRARY_PATH and LD_PRELOAD environment variables.
  • Usando a ferramenta objdump para verificar o binário para uma substituição do caminho de pesquisa da biblioteca (RPATH).
  • Causa comum: problema de configuração de hardware ou hardware
    Quando as falhas de segregação estão ocorrendo frequentemente, ou com processos diferentes ou sem um padrão claro para elas, isto pode indicar que o hardware de um sistema (subsistema de memória) é problemático, ou que as configurações de baixo nível do sistema são inadequadas. Por favor consulte TID 3301593 – O sistema Linux está pendurado ou instável para mais informações sobre como lidar com esta situação.

    Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *