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-coredumppara o manuseio do núcleo de despejo. Para verificar isto é verdade:sysctl kernel.core_pattern
$ sysctl kernel.core_patternCopy to Clipboard Copied! Toggle word wrap Toggle overflow A configuração é correta se a saída começar com o seguinte:
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump
kernel.core_pattern = |/usr/lib/systemd/systemd-coredumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedimento
Encontre o PID do processo pendurado, baseado em uma parte conhecida do nome do arquivo executável:
pgrep -a executable-name-fragment
$ pgrep -a executable-name-fragmentCopy to Clipboard Copied! Toggle word wrap Toggle overflow Este comando irá emitir uma linha na forma
PID command-line
PID command-lineCopy to Clipboard Copied! Toggle word wrap Toggle overflow Use o valor command-line para verificar se o PID pertence ao processo pretendido.
Por exemplo:
pgrep -a bc 5459 bc
$ pgrep -a bc 5459 bcCopy to Clipboard Copied! Toggle word wrap Toggle overflow Enviar um sinal de aborto para o processo:
matar -ABRT PID
# matar -ABRT PIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow Verifique se o núcleo foi capturado por
coredumpctl:Lista de coredumpctl de dólares PID
Lista de coredumpctl de dólares PIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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/bcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ coredumpctl info PIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow Para carregar o arquivo central no depurador GDB:
coredumpctl debug PID
$ coredumpctl debug PIDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
Falta de debuginfos separados, uso: dnf debuginfo-instalar bc-1.07.1-5.el8.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ coredumpctl dumpl PID > /path/to/file_for_exportCopy to Clipboard Copied! Toggle word wrap Toggle overflow Substitua /path/to/file_for_export pelo arquivo onde você quer colocar o despejo do núcleo.