Red Hat Training

A Red Hat training course is available for RHEL 8

10.4. Criação e acesso a um depósito central de lixo com coredumpctl

A ferramenta coredumpctl de systemd pode agilizar significativamente o trabalho com lixões no núcleo da máquina onde ocorreu o acidente. Este procedimento delineia como capturar um despejo de núcleo de um processo não responsivo.

Pré-requisitos

  • O sistema deve ser configurado para usar systemd-coredump para o manuseio do núcleo de despejo. Para verificar isto é verdade:

    $ sysctl kernel.core_pattern

    A configuração é correta se a saída começar com o seguinte:

    kernel.core_pattern = |/usr/lib/systemd/systemd-coredump

Procedimento

  1. Encontre o PID do processo pendurado, baseado em uma parte conhecida do nome do arquivo executável:

    $ pgrep -a executable-name-fragment

    Este comando irá emitir uma linha na forma

    PID command-line

    Use o valor command-line para verificar se o PID pertence ao processo pretendido.

    Por exemplo:

    $ pgrep -a bc
    5459 bc
  2. Enviar um sinal de aborto para o processo:

    # matar -ABRT PID
  3. Verifique se o núcleo foi capturado por coredumpctl:

    Lista de coredumpctl de dólares PID

    Por exemplo:

    $ coredumpctl list 5459
    TIME                            PID   UID   GID SIG COREFILE  EXE
    Thu 2019-11-07 15:14:46 CET    5459  1000  1000   6 present   /usr/bin/bc
  4. Examinar ou usar o arquivo principal conforme necessário.

    Você pode especificar o despejo do núcleo pelo PID e outros valores. Consulte a página do manual coredumpctl(1) para mais detalhes.

    • Para mostrar detalhes do arquivo principal:

      $ coredumpctl info PID
    • Para carregar o arquivo central no depurador GDB:

      $ coredumpctl debug PID

      Dependendo da disponibilidade de informações de depuração, a GDB sugerirá comandos para execução, como por exemplo:

      Falta de debuginfos separados, uso: dnf debuginfo-instalar bc-1.07.1-5.el8.x86_64

      Para mais detalhes sobre este processo, ver Seção 7.4, “Obtendo pacotes de debuginfo para uma aplicação ou biblioteca usando GDB”.

    • Exportar o arquivo principal para processamento posterior em outro lugar:

      $ coredumpctl dumpl PID > /path/to/file_for_export

      Substitua /path/to/file_for_export pelo arquivo onde você quer colocar o despejo do núcleo.