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)