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.
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.
/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
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:
- Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
- 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"
- Defina la reserva de memoria en 64 MB, por ejemplo:
- Guarde los cambios y refresque la configuración de grub:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- 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.
- Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
- 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. - Cambie el directorio por defecto (
- Cuando haya terminado, guarde los cambios y reinicie el servicio
kdump
.sudo systemctl restart kdump.service
- 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.
- Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
- Edite
/etc/kdump.conf
para eliminar los comentarios y cambie el valordefault
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 utilizarshell
para copiar los datos manualmente desde la línea de comandos.Nota
Las opciones
poweroff
,restart
yhalt
también son válidas para el estado de fallokdump
por defecto. Sin embargo, si realiza estas acciones, perderá los datos recopilados. Consulte el archivokdump.conf.5
en el archivo/usr/share/man/man5/kdump.conf.5.gz
para obtener más información. - Cuando haya terminado, guarde los cambios y reinicie el servicio
kdump
.sudo systemctl restart kdump.service
- 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.
- Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
- Asegúrese de que Kdump se está ejecutando:
systemctl is-active kdump
- Inicie el bloqueo desde la consola o la línea de comandos:Esto fuerza al núcleo a fallar y los archivos de volcado se copian en el directorio
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
/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. - Reinicie la instancia.
- 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 archivovmcore
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 archivokexec-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 archivovmcore
. Consulte Analyzing Crash Dumps para obtener información sobre el uso de la utilidadcrash
.
- 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
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:
- Desde una línea de comandos, utilice sus privilegios administrativos y conéctese a la instancia mediante SSH.
- 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
- Actualice el sistema:
sudo dnf update -y
- 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 paquetedebuginfo
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.
- Desde una línea de comandos, utilice sus privilegios administrativos y conéctese a la instancia mediante SSH.
- 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 archivovmcore
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>
- 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
- Cuando haya terminado de analizar el volcado del núcleo central, salga del shell escribiendo exit o q.