Recopilación de volcados por caída mediante la utilidad Kdump

Cuando un sistema Oracle Linux experimenta un aviso grave del núcleo y se bloquea inesperadamente o se bloquea, la información sobre el estado del sistema y las llamadas del núcleo que conducen al bloqueo puede ser útil para la resolución de problemas. La función Kdump proporciona un mecanismo de volcado para la información de bloqueo del núcleo. En las imágenes de plataforma de Oracle Linux, el sistema operativo está completamente configurado o configurado parcialmente para generar un volcado de memoria, en función de la fecha de publicación de la imagen.

Nota

Si tiene su propia imagen de Linux o una de marketplace, debe instalar y configurar Kdump mediante la línea de comandos.

Kdump incluye un segundo núcleo, que reside en una parte reservada de la memoria del sistema, para que pueda capturar información sobre un núcleo parado. Kdump utiliza la llamada del sistema kexec para iniciar en el segundo núcleo, denominado núcleo de captura, sin necesidad de reiniciar el sistema y, a continuación, captura el contenido de la memoria del núcleo detenido como volcado por caída. Para obtener más información sobre el contenido de un volcado por caída, consulte What's Inside a Linux Kernel Core Dump.

Para las instancias de Oracle Linux, la información de volcado por caída recopilada por Kdump se copia en el directorio /var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>, por defecto. Se crea un nuevo directorio <ip-address>-<YYYY-MM-DD>-<HH:MM:SS> para cada volcado por caída, por ejemplo:
[opc@<instance_name> crash] ls -a

127.0.0.1-2025-02-07-15:18:07
127.0.0.1-2025-02-07-16:28:19
El directorio de volcado contiene el archivo de volcado por caída, vmcore, un archivo de texto y un archivo log, por ejemplo:
[opc@<instance_name> <127.0.0.1-2025-02-07-16:28:19>] ls -a

vmcore
vmcore-dmesg.txt
kexec-dmesg.log
Importante

Si tiene una instancia de Oracle Linux a la que no se puede acceder o que no responde, puede enviar una interrupción de diagnóstico para solucionar problemas. Una interrupción de diagnóstico provoca que el sistema operativo falle o se reinicie. Para utilizar la consola o la API para enviar una interrupción de diagnóstico, debe tener Kdump configurado para generar un volcado por caída. Para obtener más información, consulte Sending a diagnostic interrupt.

Configuración de la memoria reservada para un volcado por caída

Si utiliza una imagen de plataforma de Oracle Linux, Kdump está instalado y configurado por completo o parcialmente. Puede cambiar la cantidad de memoria reservada en el núcleo para guardar el volcado por caída, también denominada reserva de memoria crashkernel. En Oracle Linux 8 y versiones anteriores, la reserva de memoria por defecto se define para ajustarse automáticamente: GRUB_CMDLINE_LINUX="crashkernel=auto". Sin embargo, crashkernel=auto no está soportado para Oracle Linux 9, por lo que debe definir una cantidad específica de memoria reservada mediante el parámetro crashkernel.

Para definir la reserva de memoria para un volcado por caída:

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Edite el archivo /etc/default/grub para definir la memoria reservada. Por ejemplo:
    • Defina la reserva de memoria en 64 MB, por ejemplo:
      GRUB_CMDLINE_LINUX="crashkernel=64MB"
    • Defina la cantidad de memoria reservada como variable mediante la sintaxis crashkernel=<range1>:<size1>,<range2>:<size2>. Por ejemplo:
      GRUB_CMDLINE_LINUX="crashkernel=512M-2G:64M,2G-:128M"
    • Defina un valor de desplazamiento para la memoria reservada. Debido a que la reserva crashkernel se produce al principio del proceso de inicio, algunos sistemas requieren que reserve memoria con un determinado desplazamiento fijo. Cuando se especifica un desplazamiento fijo, la memoria reservada comienza en ese punto. Por ejemplo, para reservar 128 MB de memoria, a partir de 16 MB:
      GRUB_CMDLINE_LINUX="crashkernel=128M@16M"
  3. Guarde los cambios y refresque la configuración de grub:
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  4. Reiniciar la instancia para aplicar los cambios.

Cambio de la ubicación de volcado por caída

Con /etc/kdump.conf, puede cambiar la ubicación en la que se guardan los archivos de volcado por caída, transferirlos mediante SSH o exportarlos a un recurso compartido de red.

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Edite el archivo de configuración en el archivo /etc/kdump.conf y elimine el carácter de comentario # al principio de cada línea que desee activar.
    • Cambie el directorio por defecto (/var/oled/crash) para los archivos de volcado por caída, por ejemplo:
      path /usr/local/<cores>
    • Transfiera archivos de volcado por caída a través de una conexión de shell seguro, por ejemplo:
      ssh <user@example.com>
      sshkey /root/.ssh/<mykey>
    • Configure los archivos de volcado por caída que se exportarán a un recurso compartido de red compatible, por ejemplo:
      nfs <example.com>:/<output>

    Consulte el archivo kdump.conf.5 en el archivo /usr/share/man/man5/kdump.conf.5.gz para obtener más información.

  3. Cuando haya terminado, guarde los cambios y reinicie el servicio kdump.
    sudo systemctl restart kdump.service 
  4. Reiniciar la instancia para aplicar los cambios.

Cambio del estado de fallo predeterminado

De manera predeterminada, si Kdump no puede enviar su resultado a las ubicaciones de salida configuradas, reinicia el servidor. Esta acción suprime todos los datos recopilados para el volcado. Para evitar este resultado, cambie la configuración de Kdump.

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Edite /etc/kdump.conf para eliminar los comentarios y cambie el valor default en el archivo de la siguiente manera:
    default dump_to_rootfs

    La opción dump_to_rootfs intenta guardar el resultado en un directorio local, lo que puede ser útil si no se puede acceder a un recurso compartido de red. En su lugar, puede utilizar shell para copiar los datos manualmente desde la línea de comandos.

    Nota

    Las opciones poweroff, restart y halt también son válidas para el estado de fallo kdump por defecto. Sin embargo, si realiza estas acciones, perderá los datos recopilados. Consulte el archivo kdump.conf.5 en el archivo /usr/share/man/man5/kdump.conf.5.gz para obtener más información.

  3. Cuando haya terminado, guarde los cambios y reinicie el servicio kdump.
    sudo systemctl restart kdump.service
  4. Reiniciar la instancia para aplicar los cambios.

Disparo de un volcado por caída

Pruebe la configuración de Kdump bloqueando el núcleo que dispara el servicio para recopilar un volcado por caída. A continuación, revise el volcado por caída.

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Asegúrese de que Kdump se está ejecutando:
    systemctl is-active kdump
  3. Inicie el bloqueo desde la consola o la línea de comandos:
    echo 1 > /proc/sys/kernel/sysrq
    echo c > /proc/sysrq-trigger
    Esto fuerza al núcleo a fallar y los archivos de volcado se copian en el directorio /var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>, por defecto, o en la ubicación que ha seleccionado en la configuración.
  4. Reinicie la instancia.
  5. Vuelva a conectarse a la instancia mediante SSH y revise los archivos de volcado por caída en /var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>:
    • El buffer de mensajes del núcleo incluye la información más esencial sobre la caída del sistema y siempre se vuelca primero en el archivo vmcore-dmesg.txt. Esto resulta útil cuando falla un intento de obtener el archivo vmcore completo, por ejemplo, debido a la falta de espacio en la ubicación de destino.
    • A medida que la herramienta kexec se inicia en el segundo núcleo y captura el contenido de la memoria del núcleo bloqueado, también escribe en el archivo kexec-dmes.log para que pueda rastrear el proceso. Por ejemplo, al final del archivo, puede ver el proceso de guardado del volcado por caída:
      ...
      Feb 07 16:28:19 linux9 systemd[1]: Starting Kdump Vmcore Save Service...
      Feb 07 16:28:19 linux9 kdump[504]: Kdump is using the default log level(3).
      Feb 07 16:28:19 linux9 kdump[541]: saving to /kdumproot/var/oled/crash/127.0.0.1-2025-02-07-16:28:19/
      Feb 07 16:28:19 linux9 kdump[546]: saving vmcore-dmesg.txt to /kdumproot/var/oled/crash/127.0.0.1-2025-02-07-16:28:19/
      Feb 07 16:28:19 linux9 kdump[552]: saving vmcore-dmesg.txt complete
      Feb 07 16:28:19 linux9 kdump[554]: saving vmcore
      Feb 07 16:28:21 linux9 kdump.sh[555]: 
      Checking for memory holes                         : [  0.0 %] /                  
      ...
      Copying data                                      : [100.0 %] \           eta: 0s
      Feb 07 16:28:21 linux9 kdump.sh[555]: The dumpfile is saved to /kdumproot/var/oled/crash/127.0.0.1-2025-02-07-16:28:19//vmcore-incomplete.
      Feb 07 16:28:21 linux9 kdump.sh[555]: makedumpfile Completed.
      Feb 07 16:28:21 linux9 kdump[559]: saving vmcore complete
      Feb 07 16:28:21 linux9 kdump[561]: saving the /run/initramfs/kexec-dmesg.log to /kdumproot/var/oled/crash/127.0.0.1-2025-02-07-16:28:19//
    • El archivo vmcore contiene la información de volcado por caída. Para analizar el volcado por caída, necesita una utilidad que pueda leer el formato de archivo vmcore. Consulte Analyzing Crash Dumps para obtener información sobre el uso de la utilidad crash.

Análisis de volcados por caída

Puede utilizar la utilidad crash para analizar los volcados por caída recopilados por Kdump. En las imágenes de la plataforma Oracle Linux, crash está instalado por defecto. Para otras instancias de Linux, utilice la línea de comandos para instalarlo: sudo dnf install crash.

Configuración de una instancia de Oracle Linux para utilizar la utilidad de bloqueo

Para analizar un volcado por caída con crash, complete las siguientes tareas de configuración:

  1. Desde una línea de comandos, utilice sus privilegios administrativos y conéctese a la instancia mediante SSH.
  2. Active el repositorio debuginfo de Oracle Linux mediante la creación del archivo /etc/yum.repos.d/debuginfo.repo con privilegios de usuario root y el siguiente contenido, por ejemplo:
    [debuginfo]
    name=Oracle Linux 8 Debuginfo Packages
    baseurl=https://oss.oracle.com/ol8/debuginfo/
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
    gpgcheck=1
    enabled=1
  3. Actualice el sistema:
    sudo dnf update -y
  4. Instale el paquete kernel-uek-debuginfo:
    sudo dnf install -y kernel-uek-debuginfo-$(uname -r)
    Importante

    Ejecute el comando de instalación cada vez que se actualice el núcleo mediante el gestor de paquetes. El paquete debuginfo solo es funcional cuando coincide con el núcleo en ejecución y no se reemplaza automáticamente cuando se instala una versión más reciente del núcleo en el sistema.

Análisis de un volcado por caída mediante la utilidad crash

Para analizar un volcado por caída, proporcione la información de vmcore a crash y, a continuación, utilice las opciones del shell crash para recuperar la información del volcado por caída. Para obtener información detallada sobre el uso de la utilidad crash, escriba man crash en un símbolo del sistema o consulte la documentación sobre accidentes.

  1. Desde una línea de comandos, utilice sus privilegios administrativos y conéctese a la instancia mediante SSH.
  2. Proporcione la ubicación del módulo debuginfo del núcleo y la ubicación del volcado del núcleo central como parámetros para la utilidad crash, por ejemplo:
    sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>/vmcore

    $(uname -r) identifica la versión del núcleo en ejecución dentro del comando, <ip-address>-<YYYY-MM-DD>-<HH:MM:SS> representa el directorio que se crea para los archivos de volcado por caída y el archivo vmcore contiene el volcado por caída.

    El shell crash se inicia y muestra información sobre la caída del sistema, como:

    KERNEL: /usr/lib/debug/lib/modules/5.15.0-302.167.6.el9uek.x86_64/vmlinux
        DUMPFILE: /var/oled/crash/127.0.0.1-2025-02-07-16:28:19/vmcore  [PARTIAL DUMP]
            CPUS: 2
            DATE: Fri Feb  7 16:28:15 GMT 2025
          UPTIME: 01:09:58
    LOAD AVERAGE: 0.00, 0.02, 0.00
           TASKS: 204
        NODENAME: oci-linux9
         RELEASE: 5.15.0-302.167.6.el9uek.x86_64
         VERSION: #2 SMP Mon Nov 4 23:41:59 PST 2024
         MACHINE: x86_64  (2445 Mhz)
          MEMORY: 16 GB
           PANIC: "Kernel panic - not syncing: NMI: Not continuing"
             PID: 0
         COMMAND: "swapper/0"
            TASK: ffffffffb761a980  (1 of 2)  [THREAD_INFO: ffffffffb761a980]
             CPU: 0
           STATE: TASK_RUNNING (PANIC)
    
    crash>
  3. En el indicador crash, introduzca una opción para obtener más información sobre el volcado por caída, por ejemplo:
    • bt -a muestra un rastreo de pila de las tareas activas cuando el núcleo genera un aviso grave, por ejemplo:
      crash> bt -a
      
      PID: 286    TASK: c0b3a000  CPU: 0   COMMAND: "in.rlogind"
          #0 [c0b3be90] crash_save_current_state at c011aed0
          #1 [c0b3bea4] panic at c011367c
          #2 [c0b3bee8] tulip_interrupt at c01bc820
          #3 [c0b3bf08] handle_IRQ_event at c010a551
          #4 [c0b3bf2c] do_8259A_IRQ at c010a319
          #5 [c0b3bf3c] do_IRQ at c010a653
          #6 [c0b3bfbc] ret_from_intr at c0109634
             EAX: 00000000  EBX: c0e68280  ECX: 00000000  EDX: 00000004  EBP: c0b3bfbc
             DS:  0018      ESI: 00000004  ES:  0018      EDI: c0e68284 
             CS:  0010      EIP: c012f803  ERR: ffffff09  EFLAGS: 00000246 
          #7 [c0b3bfbc] sys_select at c012f803
          #8 [c0b3bfc0] system_call at c0109598
             EAX: 0000008e  EBX: 00000004  ECX: bfffc9a0  EDX: 00000000 
             DS:  002b      ESI: bfffc8a0  ES:  002b      EDI: 00000000 
             SS:  002b      ESP: bfffc82c  EBP: bfffd224 
             CS:  0023      EIP: 400d032e  ERR: 0000008e  EFLAGS: 00000246  
    • ps -A muestra solo la tarea activa en cada CPU, por ejemplo:
      crash> ps -A
      
      PID    PPID  CPU       TASK        ST  %MEM    VSZ    RSS  COMM
      >    10      2   1  ffff880212969710  IN   0.0      0      0   [migration/1]
      >     0      0   3  ffff884026d43520  RU   0.0      0      0   [swapper]
      >  6582      1   2  ffff880f49c52040  RU   0.0 42202472  33368  oracle
      >  9497      1   0  ffff880549ec2ab0  RU   0.0 42314692 138664  oracle
    • vm muestra información básica de memoria virtual del contexto actual, por ejemplo:
      crash> vm
      
      PID: 30986  TASK: c0440000  CPU: 0   COMMAND: "bash"
             MM       PGD       RSS    TOTAL_VM
          c303fe20  c4789000    88k      1728k
            VMA      START      END     FLAGS  FILE
          c0d1f540   8048000   80ad000  1875   /bin/bash
          c0d1f400   80ad000   80b3000  1873   /bin/bash
          c0d1f880   80b3000   80ec000    77
          c0d1f0c0  40000000  40012000   875   /lib/ld-2.1.1.so
          c0d1f700  40012000  40013000   873   /lib/ld-2.1.1.so
          c0d1fe00  40013000  40014000    77
          c0d1f580  40014000  40016000    73
      ...
    • files muestra información sobre los archivos abiertos en el contexto actual.
      crash> files
      
      PID: 720    TASK: c67f2000  CPU: 1   COMMAND: "innd"
          ROOT: /    CWD: /var/spool/news/articles
           FD    FILE     DENTRY    INODE    TYPE  PATH
            0  c6b9c740  c7cc45a0  c7c939e0  CHR   /dev/null
            1  c6b9c800  c537bb20  c54d0000  REG   /var/log/news/news
            2  c6df9600  c537b420  c5c36360  REG   /var/log/news/errlog
            3  c74182c0  c6ede260  c6da3d40  PIPE
            4  c6df9720  c696c620  c69398c0  SOCK
            5  c6b9cc20  c68e7000  c6938d80  SOCK
            6  c6b9c920  c7cc45a0  c7c939e0  CHR   /dev/null
            7  c6b9c680  c58fa5c0  c58a1200  REG   /var/lib/news/history
            8  c6df9f00  c6ede760  c6da3200  PIPE
    • kmem -i muestra información de uso de memoria de núcleo, por ejemplo:
      crash> kmem -i
      
                           PAGES        TOTAL      PERCENTAGE
              TOTAL MEM  1974231       7.5 GB         ----
                   FREE   208962     816.3 MB   10% of TOTAL MEM
                   USED  1765269       6.7 GB   89% of TOTAL MEM
                 SHARED   365066       1.4 GB   18% of TOTAL MEM
                BUFFERS   111376     435.1 MB    5% of TOTAL MEM
                 CACHED  1276196       4.9 GB   64% of TOTAL MEM
                   SLAB   120410     470.4 MB    6% of TOTAL MEM
          
             TOTAL HUGE   524288         2 GB         ----
              HUGE FREE   524288         2 GB  100% of TOTAL HUGE
          
             TOTAL SWAP  2498559       9.5 GB         ----
              SWAP USED    81978     320.2 MB    3% of TOTAL SWAP
              SWAP FREE  2416581       9.2 GB   96% of TOTAL SWAP
          
           COMMIT LIMIT  3485674      13.3 GB         ----
              COMMITTED   850651       3.2 GB   24% of TOTAL LIMIT
  4. Cuando haya terminado de analizar el volcado del núcleo central, salga del shell escribiendo exit o q.