Raccolta dei dump degli arresti anomali mediante la utility Kdump
Quando un sistema Oracle Linux verifica un errore panic del kernel e si blocca in modo imprevisto o si blocca, le informazioni sullo stato del sistema e sulle chiamate kernel che portano al blocco possono essere utili per la risoluzione dei problemi. La funzione Kdump fornisce un meccanismo di dumping per le informazioni sugli arresti anomali del kernel. Nelle immagini della piattaforma di Oracle Linux il sistema operativo è completamente configurato o parzialmente configurato per generare un crash dump, a seconda della data di rilascio dell'immagine.
Se si dispone di una propria immagine Linux o di una marketplace, è necessario installare e configurare Kdump utilizzando la riga di comando.
Kdump include un secondo kernel, che risiede in una parte riservata della memoria di sistema, in modo che possa acquisire informazioni su un kernel arrestato. Kdump utilizza la chiamata di sistema kexec per eseguire il boot del secondo kernel, chiamato capture kernel, senza la necessità di eseguire il reboot del sistema, quindi acquisisce il contenuto della memoria del kernel arrestato come crash dump. Per ulteriori informazioni sul contenuto di un crash dump, vedere What's Inside a Linux Kernel Core Dump.
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
, per impostazione predefinita. Viene creata una nuova directory <ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
per ogni crash dump, ad esempio: [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
La directory di dump contiene il file di crash dump, vmcore
, un file di testo e un file di log, ad esempio:[opc@<instance_name> <127.0.0.1-2025-02-07-16:28:19>] ls -a
vmcore
vmcore-dmesg.txt
kexec-dmesg.log
Se un'istanza di Oracle Linux non è raggiungibile o non risponde, è possibile inviare un interrupt diagnostico per risolvere i problemi. Un interrupt diagnostico causa l'arresto anomalo e il riavvio del sistema operativo dell'istanza. Per utilizzare la console o l'API per inviare un interrupt diagnostico, è necessario che Kdump sia configurato per generare un crash dump. Per ulteriori informazioni, vedere Invio di un interrupt diagnostico.
Impostazione della memoria riservata per un crash dump
Se si utilizza un'immagine della piattaforma Oracle Linux, Kdump viene installato e configurato completamente o parzialmente. È possibile modificare la quantità di memoria riservata nel kernel per salvare il crash dump, anche denominato riserva di memoria crashkernel. In Oracle Linux 8 e versioni precedenti, la prenotazione di memoria predefinita è impostata per la regolazione automatica: GRUB_CMDLINE_LINUX="crashkernel=auto"
. Tuttavia, crashkernel=auto
non è supportato per Oracle Linux 9, pertanto è necessario impostare una quantità specifica di memoria riservata utilizzando il parametro crashkernel
.
Per impostare la riserva di memoria per un crash dump:
- Da una riga di comando, utilizzando i privilegi di amministrazione connettersi all'istanza utilizzando SSH.
- Modificare il file
/etc/default/grub
per impostare la memoria riservata. Ad esempio:- Impostare la riserva di memoria su 64 MB, ad esempio:
GRUB_CMDLINE_LINUX="crashkernel=
64MB
" - Impostare la quantità di memoria riservata come variabile utilizzando la sintassi
crashkernel=<range1>:<size1>,<range2>:<size2>
. Ad esempio:GRUB_CMDLINE_LINUX="crashkernel=512M-2G:64M,2G-:128M"
- Definire un valore di offset per la memoria riservata. Poiché la prenotazione di
crashkernel
si verifica nelle prime fasi del processo di boot, alcuni sistemi richiedono la prenotazione della memoria con un determinato offset fisso. Quando si specifica un offset fisso, la memoria riservata inizia in quel punto. Ad esempio, per riservare 128 MB di memoria, a partire da 16 MB:GRUB_CMDLINE_LINUX="crashkernel=128M@16M"
- Impostare la riserva di memoria su 64 MB, ad esempio:
- Salvare le modifiche e aggiornare la configurazione di grub:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- Riavviare l'istanza per applicare le modifiche.
Modifica della posizione di crash dump
Utilizzando /etc/kdump.conf
, è possibile modificare la posizione in cui vengono salvati i file di crash dump, trasferirli tramite SSH o esportarli in una condivisione di rete.
- Da una riga di comando, utilizzando i privilegi di amministrazione connettersi all'istanza utilizzando SSH.
- Modificare il file di configurazione nel file
/etc/kdump.conf
e rimuovere il carattere di commento#
all'inizio di ogni riga che si desidera abilitare.- Modificare la directory predefinita (
/var/oled/crash
) per i file di crash dump, ad esempio:path /usr/local/<cores>
- Trasferire i file di crash dump su una connessione a una shell sicura, ad esempio:
ssh <user@example.com> sshkey /root/.ssh/<mykey>
- Impostare i file di crash dump da esportare in una condivisione di rete compatibile, ad esempio:
nfs <example.com>:/<output>
Per maggiori informazioni, vedere il file
kdump.conf.5
nell'archivio/usr/share/man/man5/kdump.conf.5.gz
. - Modificare la directory predefinita (
- Al termine, salvare le modifiche e riavviare il servizio
kdump
.sudo systemctl restart kdump.service
- Riavviare l'istanza per applicare le modifiche.
Modifica dello stato di errore predefinito
Per impostazione predefinita, se Kdump non riesce a inviare il risultato alle posizioni di output configurate, riavvia il server. Questa azione elimina tutti i dati raccolti per il dump. Per evitare questo risultato, modificare la configurazione del dump.
- Da una riga di comando, utilizzando i privilegi di amministrazione connettersi all'istanza utilizzando SSH.
- Modificare
/etc/kdump.conf
per annullare il commento e modificare il valoredefault
nel file come indicato di seguito.default dump_to_rootfs
L'opzione
dump_to_rootfs
tenta di salvare il risultato in una directory locale, che può risultare utile se una condivisione di rete non è raggiungibile. È invece possibile utilizzareshell
per copiare i dati manualmente dalla riga di comando.Nota
Le opzioni
poweroff
,restart
ehalt
sono valide anche per lo stato di errorekdump
predefinito. Tuttavia, l'esecuzione di queste azioni comporta la perdita dei dati raccolti se tali azioni vengono eseguite. Per maggiori informazioni, vedere il filekdump.conf.5
nell'archivio/usr/share/man/man5/kdump.conf.5.gz
. - Al termine, salvare le modifiche e riavviare il servizio
kdump
.sudo systemctl restart kdump.service
- Riavviare l'istanza per applicare le modifiche.
Attivazione di un crash dump
Testare la configurazione di Kdump bloccando il kernel che attiva il servizio per raccogliere un crash dump. Leggere quindi il file contenente il crash dump.
- Da una riga di comando, utilizzando i privilegi di amministrazione connettersi all'istanza utilizzando SSH.
- Assicurarsi che Kdump sia in esecuzione:
systemctl is-active kdump
- Avviare il crash dalla console o dalla riga di comando:In questo modo il kernel viene bloccato e i file di dump vengono copiati nella directory
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
per impostazione predefinita o nella posizione selezionata nella configurazione. - Riavviare l'istanza.
- Eseguire la riconnessione all'istanza utilizzando SSH e rivedere i file di crash dump in
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
:- Il buffer dei messaggi del kernel include le informazioni più essenziali sul crash del sistema e viene sempre salvato per primo nel file
vmcore-dmesg.txt
. Questo è utile quando un tentativo di ottenere il filevmcore
completo non riesce, ad esempio a causa della mancanza di spazio sulla posizione di destinazione. - Quando lo strumento
kexec
si avvia nel secondo kernel e acquisisce il contenuto della memoria del kernel bloccato, scrive anche nel filekexec-dmes.log
in modo da poter tracciare il processo. Ad esempio, alla fine del file è possibile vedere il processo di salvataggio del crash dump:... 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//
- Il file
vmcore
contiene le informazioni sul crash dump. Per analizzare il crash dump, è necessaria una utility in grado di leggere il formato del filevmcore
. Vedere Analisi dei dump degli arresti anomali per informazioni sull'uso della utilitycrash
.
- Il buffer dei messaggi del kernel include le informazioni più essenziali sul crash del sistema e viene sempre salvato per primo nel file
Analisi dei crash dump
È possibile utilizzare la utility crash
per analizzare i dump di crash raccolti da Kdump. Nelle immagini della piattaforma Oracle Linux, crash
viene installato per impostazione predefinita. Per altre istanze Linux, utilizzare la riga di comando per installarla: sudo dnf install crash
.
Configurare un'istanza di Oracle Linux per utilizzare la utility di arresto anomalo
Per analizzare un crash dump con crash
, completare i task di configurazione indicati di seguito.
- Da una riga di comando, utilizzare i privilegi di amministrazione e connettersi all'istanza utilizzando SSH.
- Abilitare il repository
debuginfo
di Oracle Linux creando il file/etc/yum.repos.d/debuginfo.repo
con privilegi root e i seguenti contenuti, ad esempio:[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
- Aggiornare il sistema:
sudo dnf update -y
- Installare il pacchetto
kernel-uek-debuginfo
:sudo dnf install -y kernel-uek-debuginfo-$(uname -r)
Importante
Eseguire il comando di installazione ogni volta che il kernel viene aggiornato mediante Package Manager. Il pacchettodebuginfo
funziona solo quando corrisponde al kernel in esecuzione e non viene sostituito automaticamente quando viene installata una versione più recente del kernel nel sistema.
Analizzare un crash dump utilizzando l'utility crash
Per analizzare un crash dump, fornire le informazioni vmcore
a crash
, quindi utilizzare le opzioni della shell crash
per recuperare le informazioni sul crash dump. Per informazioni dettagliate sull'uso della utility crash, digitare man crash
al prompt dei comandi o consultare la documentazione relativa all'arresto anomalo.
- Da una riga di comando, utilizzare i privilegi di amministrazione e connettersi all'istanza utilizzando SSH.
- Fornire la posizione del modulo
debuginfo
kernel e la posizione del dump core come parametri per la utility crash, ad esempio: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 versione del kernel in esecuzione nel comando,
<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
rappresenta la directory creata per i file di crash dump e il filevmcore
contiene il crash dump.La shell
crash
inizia e visualizza alcune informazioni sull'arresto anomalo del sistema, ad esempio: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>
- Al prompt
crash
, immettere un'opzione per ottenere ulteriori informazioni sul crash dump, ad esempio:bt -a
visualizza uno stack trace del task o dei task attivi quando il kernel ha generato il panicked, ad esempio: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
visualizza solo il task attivo su ogni CPU, ad esempio: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
visualizza le informazioni di base sulla memoria virtuale del contesto corrente, ad esempio: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
visualizza informazioni sui file aperti nel contesto corrente.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
visualizza le informazioni sull'uso della memoria del kernel, ad esempio: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
- Al termine dell'analisi del dump di base, uscire dalla shell digitando exit o q.