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 deja de responder, 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 imágenes de la plataforma de Oracle Linux, el sistema operativo está completamente configurado o parcialmente configurado para generar un volcado de memoria, en función de la fecha en la que se publicó la imagen.
Para las imágenes de Linux personalizadas desplegadas y de marketplace, instale y configure Kdump mediante la línea de comandos.
El kdump incluye un segundo núcleo, que reside en una parte reservada de la memoria del sistema, de modo que puede capturar información sobre un núcleo parado. Kdump utiliza la llamada del sistema kexec para iniciar en el segundo núcleo, denominado capture kernel, 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:19El 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 Envío de una interrupción de diagnóstico.
Definición de la memoria reservada para un volcado por caída
En las imágenes de la plataforma Oracle Linux, Kdump se instala y se configura completamente o parcialmente por defecto. Puede cambiar la cantidad de memoria que está reservada en el núcleo para guardar el volcado por caída, también denominado reserva de memoria de 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 en Oracle Linux 9 o posterior, 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/grubpara 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
crashkernelse produce al principio del proceso de inicio, algunos sistemas requieren que reserve memoria con un desplazamiento fijo determinado. 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 - Reinicie 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 a través de 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.confy 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.5en el archivo/usr/share/man/man5/kdump.conf.5.gzpara 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 - Reinicie la instancia para aplicar los cambios.
Cambio del estado de fallo predeterminado
De manera predeterminada, si Kdump no envía el resultado a las ubicaciones de salida configuradas, reinicia el servidor. Esta acción suprime cualquier dato que se haya recopilado 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.confpara eliminar el comentario y cambie el valordefaulten el archivo de la siguiente manera:default dump_to_rootfsLa opción
dump_to_rootfsintenta guardar el resultado en un directorio local, lo cual puede ser útil si no se puede acceder a un recurso compartido de red. En su lugar, puede utilizarshellpara copiar los datos manualmente desde la línea de comandos.Nota
Las opciones
poweroff,restartyhalttambién son válidas para el estado de fallokdumppor defecto. Sin embargo, al realizar estas acciones, se pierden los datos recopilados si se realizan dichas acciones. Consulte el archivokdump.conf.5en el archivo/usr/share/man/man5/kdump.conf.5.gzpara obtener más información. - Cuando haya terminado, guarde los cambios y reinicie el servicio
kdump.sudo systemctl restart kdump.service - Reinicie 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 que el núcleo se bloquee 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 archivovmcorecompleto, por ejemplo, debido a la falta de espacio en la ubicación de destino. - A medida que la herramienta
kexecse inicia en el segundo núcleo y captura el contenido de la memoria del núcleo bloqueado, también escribe en el archivokexec-dmes.logpara 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
vmcorecontiene 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 Análisis de volcados por caída 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 plataforma de Oracle Linux, crash se instala 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, realice 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
debuginfode Oracle Linux mediante la creación del archivo/etc/yum.repos.d/debuginfo.repocon 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=1Sustituya
ol8porol9si utiliza Oracle Linux 9 ool10si utiliza Oracle Linux 10. - 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 el núcleo se actualice mediante el gestor de paquetes. El paquetedebuginfosolo funciona cuando coincide con el núcleo en ejecución y no se sustituye 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 vmcore a crash y, a continuación, utilice las opciones del shell crash para recuperar la información de 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 bloqueos.
- 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
debuginfodel núcleo y la ubicación del volcado del núcleo 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 archivovmcorecontiene el volcado por caída.El shell
crashse inicia y muestra información de bloqueo 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 -amuestra 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: 00000246ps -Asolo muestra 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 oraclevmmuestra información básica de la 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 ...filesmuestra 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 PIPEkmem -imuestra información de uso de memoria del 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.