GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar kdump para el análisis de fallas del kernel de Linux

Kdump es una utilidad que se utiliza para capturar el volcado del núcleo del sistema en caso de fallas del sistema.

Estos volcados del núcleo capturados se pueden usar más adelante para analizar la causa exacta de la falla del sistema e implementar la solución necesaria para evitar fallas en el futuro.

Kdump reserva una pequeña porción de la memoria para el kernel secundario llamado crashkernel.

Este kernel secundario o de bloqueo se utiliza para capturar la imagen de volcado del núcleo cada vez que el sistema falla.

1. Instalar las herramientas de Kdump

Primero, instale el kdump, que es parte del paquete kexec-tools.

# yum install kexec-tools

2. Establecer crashkernel en grub.conf

Una vez que el paquete esté instalado, edite el archivo /boot/grub/grub.conf y configure la cantidad de memoria que se reservará para el kernel de bloqueo de kdump.

Puede editar /boot/grub/grub.conf para el valor crashkernel y establecerlo en un valor automático o especificado por el usuario. Se recomienda usar un mínimo de 128M para una máquina con memoria 2G o superior.

En el siguiente ejemplo, busque la línea que comienza con "kernel", donde se establece en "crashkernel=auto".

# vi /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux (2.6.32-419.el6.x86_64)
  root (hd0,0)
  kernel /vmlinuz-2.6.32-419.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
  initrd /initramfs-2.6.32-419.el6.x86_64.img

3. Configurar ubicación de volcado

Una vez que el kernel falla, el volcado del núcleo se puede capturar en el sistema de archivos local o en el sistema de archivos remoto (NFS) en función de la configuración definida en /etc/kdump.conf (en el sistema operativo SLES, la ruta es /etc/sysconfig/kdump).

Este archivo se crea automáticamente cuando se instala el paquete kexec-tools.

Todas las entradas de este archivo se comentarán de forma predeterminada. Puede descomentar los que sean necesarios para sus mejores opciones.

# vi /etc/kdump.conf
#raw /dev/sda5
#ext4 /dev/sda3
#ext4 LABEL=/boot
#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
#net my.server.com:/export/tmp
#net [email protected]
path /var/crash
core_collector makedumpfile -c --message-level 1 -d 31
#core_collector scp
#core_collector cp --sparse=always
#extra_bins /bin/cp
#link_delay 60
#kdump_post /var/crash/scripts/kdump-post.sh
#extra_bins /usr/bin/lftp
#disk_timeout 30
#extra_modules gfs2
#options modulename options
#default shell
#debug_mem_level 0
#force_rebuild 1
#sshkey /root/.ssh/kdump_id_rsa

En el archivo anterior:

  • Para escribir el volcado en un dispositivo sin procesar, puede descomentar "raw /dev/sda5" y cambiarlo para que apunte a la ubicación de volcado correcta.
  • Si desea cambiar la ruta de la ubicación de volcado, descomente y cambie "ruta /var/crash" para que apunte a la nueva ubicación.
  • Para NFS, puede descomentar "#net my.server.com:/export/tmp" y apuntar a la ubicación actual del servidor NFS.

4. Configurar recopilador principal

El siguiente paso es configurar el recopilador principal en el archivo de configuración de Kdump. Es importante comprimir los datos capturados y filtrar toda la información innecesaria del archivo central capturado.

Para habilitar el recopilador principal, descomente la siguiente línea que comienza con core_collector.

core_collector makedumpfile -c --message-level 1 -d 31
  • makedumpfile especificado en core_collector en realidad crea un pequeño DUMPFILE al comprimir los datos.
  • makedumpfile proporciona dos formatos DUMPFILE (el formato ELF y el formato comprimido con kdump).
  • De forma predeterminada, makedumpfile crea un DUMPFILE en formato comprimido con kdump.
  • El formato comprimido con kdump solo se puede leer con la utilidad de bloqueo y puede ser más pequeño que el formato ELF debido a la compatibilidad con la compresión.
  • El formato ELF se puede leer con GDB y la utilidad de bloqueo.
  • -c es para comprimir datos de volcado por cada página
  • -d es el número de páginas que son innecesarias y pueden ignorarse.

Si quita el comentario de la línea #default shell, se invocará el shell si kdump no puede recopilar el núcleo. Luego, el administrador puede realizar manualmente el volcado del núcleo utilizando los comandos makedumpfile.

5. Reinicie los servicios de kdump

Una vez configurado kdump, reinicie los servicios de kdump,

# service kdump restart
Stopping kdump:   [  OK  ]
Starting kdump:   [  OK  ]

# service kdump status
Kdump is operational

Si tiene algún problema al iniciar los servicios, entonces el módulo kdump o el parámetro crashkernel no se han configurado correctamente. Por lo tanto, verifique /proc/cmdline y asegúrese de que se refleje para incluir el valor de crashkernel.

6. Activar manualmente el volcado del núcleo

Puede activar manualmente el volcado del núcleo utilizando los siguientes comandos:

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

El servidor se reiniciará y se generará el volcado de memoria.

7. Ver los archivos principales

Una vez que se reinicie el servidor, verá que el archivo principal se genera en /var/crash según la ubicación definida en /var/crash.

Verá el archivo vmcore y vmcore-dmseg.txt:

# ls -lR /var/crash
drwxr-xr-x. 2 root root 4096 Mar 26 11:06 127.0.0.1-2014-03-26-11:06:43

/var/crash/127.0.0.1-2014-03-26-11:06:43:
-rw-------. 1 root root 33595159 Mar 26 11:06 vmcore
-rw-r--r--. 1 root root    79498 Mar 26 11:06 vmcore-dmesg.txt

8. Análisis de Kdump usando bloqueo

La utilidad Crash se utiliza para analizar el archivo central capturado por kdump.

También se puede usar para analizar los archivos principales creados por otras utilidades de volcado como netdump, diskdump, xendump.

Debe asegurarse de que el paquete "kernel-debuginfo" esté presente y esté al mismo nivel que el kernel.

Inicie la herramienta de bloqueo como se muestra a continuación. Después de este comando, obtendrá un indicador de efectivo, donde puede ejecutar comandos de bloqueo:

# crash /var/crash/127.0.0.1-2014-03-26-12\:24\:39/vmcore /usr/lib/debug/lib/modules/`uname –r`/vmlinux

crash>

9. Ver el proceso cuando el sistema falla

Ejecute el comando ps en el indicador de bloqueo, que mostrará todo el proceso en ejecución cuando el sistema se bloqueó.

crash> ps
   PID    PPID  CPU       TASK        ST  %MEM     VSZ    RSS  COMM
      0      0   0  ffffffff81a8d020  RU   0.0       0      0  [swapper]
      1      0   0  ffff88013e7db500  IN   0.0   19356   1544  init
      2      0   0  ffff88013e7daaa0  IN   0.0       0      0  [kthreadd]
      3      2   0  ffff88013e7da040  IN   0.0       0      0  [migration/0]
      4      2   0  ffff88013e7e9540  IN   0.0       0      0  [ksoftirqd/0]
      7      2   0  ffff88013dc19500  IN   0.0       0      0  [events/0]

10. Ver el espacio de intercambio cuando el sistema falla

Ejecute el comando de intercambio en el indicador de bloqueo, que mostrará el uso del espacio de intercambio cuando el sistema se bloqueó.

crash> swap
FILENAME           TYPE         SIZE      USED   PCT  PRIORITY
/dm-1            PARTITION    2064376k       0k   0%     -1

11. Ver IPCS cuando el sistema falla

Ejecute el comando ipcs en el indicador de bloqueo, que mostrará el uso de la memoria compartida cuando el sistema se bloqueó.

crash> ipcs
SHMID_KERNEL     KEY      SHMID      UID   PERMS BYTES      NATTCH STATUS
(none allocated)

SEM_ARRAY        KEY      SEMID      UID   PERMS NSEMS
ffff8801394c0990 00000000 0          0     600   1
ffff880138f09bd0 00000000 65537      0     600   1

MSG_QUEUE        KEY      MSQID      UID   PERMS USED-BYTES   MESSAGES
(none allocated)

12. Ver IRQ cuando el sistema falla

Ejecute el comando irq en el indicador de bloqueo, que mostrará las estadísticas de IRQ cuando el sistema se bloquee.

crash> irq -s
           CPU0
  0:        149  IO-APIC-edge     timer
  1:        453  IO-APIC-edge     i8042
  7:          0  IO-APIC-edge     parport0
  8:          0  IO-APIC-edge     rtc0
  9:          0  IO-APIC-fasteoi  acpi
 12:        111  IO-APIC-edge     i8042
 14:        108  IO-APIC-edge     ata_piix
 .
 .

vtop:este comando traduce la dirección virtual de un usuario o kernel a su dirección física.
foreach:este comando muestra datos para múltiples tareas en el sistema
waitq:este comando muestra todas las tareas en cola en una cola de espera.

13. Ver la memoria virtual cuando el sistema falla

Ejecute el comando vm en el indicador de bloqueo, que mostrará el uso de la memoria virtual cuando el sistema se bloqueó.

crash> vm
PID: 5210   TASK: ffff8801396f6aa0  CPU: 0   COMMAND: "bash"
       MM              		 PGD          RSS    TOTAL_VM
ffff88013975d880  ffff88013a0c5000  1808k   108340k
      VMA           START       END     FLAGS FILE
ffff88013a0c4ed0     400000     4d4000 8001875 /bin/bash
ffff88013cd63210 3804800000 3804820000 8000875 /lib64/ld-2.12.so
ffff880138cf8ed0 3804c00000 3804c02000 8000075 /lib64/libdl-2.12.so

14. Ver los archivos abiertos cuando el sistema falla

Ejecute el comando de archivos en el indicador de bloqueo, que mostrará los archivos abiertos cuando el sistema se bloqueó.

crash> files
PID: 5210   TASK: ffff8801396f6aa0  CPU: 0   COMMAND: "bash"
ROOT: /    CWD: /root
 FD       FILE            DENTRY           INODE       TYPE PATH
  0 ffff88013cf76d40 ffff88013a836480 ffff880139b70d48 CHR  /tty1
  1 ffff88013c4a5d80 ffff88013c90a440 ffff880135992308 REG  /proc/sysrq-trigger
255 ffff88013cf76d40 ffff88013a836480 ffff880139b70d48 CHR  /tty1
..

15. Ver información del sistema cuando el sistema falla

Ejecute el comando sys en el indicador de bloqueo, que mostrará información del sistema cuando el sistema se bloquee.

crash> sys
      KERNEL: /usr/lib/debug/lib/modules/2.6.32-431.5.1.el6.x86_64/vmlinux
    DUMPFILE: /var/crash/127.0.0.1-2014-03-26-12:24:39/vmcore  [PARTIAL DUMP]
        CPUS: 1
        DATE: Wed Mar 26 12:24:36 2014
      UPTIME: 00:01:32
LOAD AVERAGE: 0.17, 0.09, 0.03
       TASKS: 159
    NODENAME: elserver1.abc.com
     RELEASE: 2.6.32-431.5.1.el6.x86_64
     VERSION: #1 SMP Fri Jan 10 14:46:43 EST 2014
     MACHINE: x86_64  (2132 Mhz)
      MEMORY: 4 GB
       PANIC: "Oops: 0002 [#1] SMP " (check log for details)

Linux
  1. Cómo usar BusyBox en Linux

  2. Cómo uso cron en Linux

  3. Cómo usar rsync avanzado para grandes copias de seguridad de Linux

  4. Cómo usar systemd-nspawn para la recuperación del sistema Linux

  5. Cómo usar Descomprimir en Linux

Cómo usar el comando nohup de Linux

Cómo usar traceroute en Kali Linux

Cómo usar la pantalla de Linux

Cómo comprobar los puertos de escucha en Linux (Puertos en uso)

Diferentes tipos de kernel para Arch Linux y cómo usarlos

Cómo instalar Zenoss Core para monitoreo en Linux CentOS / RHEL