Kdump è un'utilità utilizzata per acquisire il core dump del sistema in caso di crash del sistema.
Questi core dump acquisiti possono essere utilizzati in seguito per analizzare la causa esatta dell'errore di sistema e implementare la correzione necessaria per prevenire arresti anomali in futuro.
Kdump riserva una piccola porzione di memoria per il kernel secondario chiamato crashkernel.
Questo kernel secondario o di arresto anomalo viene utilizzato per acquisire l'immagine del dump principale ogni volta che il sistema si arresta in modo anomalo.
1. Installa gli strumenti di Kdump
Per prima cosa, installa kdump, che fa parte del pacchetto kexec-tools.
# yum install kexec-tools
2. Imposta crashkernel in grub.conf
Una volta installato il pacchetto, modifica il file /boot/grub/grub.conf e imposta la quantità di memoria da riservare per il crash kernel di kdump.
È possibile modificare /boot/grub/grub.conf per il valore crashkernel e impostarlo sul valore auto o specificato dall'utente. Si consiglia di utilizzare un minimo di 128 M per una macchina con memoria 2G o superiore.
Nell'esempio seguente, cerca la riga che inizia con "kernel", dove è impostata su "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. Configura la posizione del dump
Una volta che il kernel si arresta in modo anomalo, il core dump può essere acquisito nel filesystem locale o nel filesystem remoto (NFS) in base alle impostazioni definite in /etc/kdump.conf (nel sistema operativo SLES il percorso è /etc/sysconfig/kdump).
Questo file viene creato automaticamente quando viene installato il pacchetto kexec-tools.
Tutte le voci in questo file verranno commentate per impostazione predefinita. Puoi decommentare quelli che sono necessari per le tue migliori opzioni.
# 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
Nel file sopra:
- Per scrivere il dump su un dispositivo non elaborato, puoi decommentare "raw /dev/sda5" e cambiarlo in modo che punti alla posizione del dump corretta.
- Se vuoi cambiare il percorso della posizione del dump, decommenta e cambia "percorso /var/crash" per puntare alla nuova posizione.
- Per NFS, puoi rimuovere il commento da "#net my.server.com:/export/tmp" e puntare alla posizione del server NFS corrente.
4. Configura Core Collector
Il prossimo passo è configurare il raccoglitore di core nel file di configurazione di Kdump. È importante comprimere i dati acquisiti e filtrare tutte le informazioni non necessarie dal file principale acquisito.
Per abilitare il core collector, decommenta la riga seguente che inizia con core_collector.
core_collector makedumpfile -c --message-level 1 -d 31
- makedumpfile specificato in core_collector crea effettivamente un piccolo DUMPFILE comprimendo i dati.
- makedumpfile fornisce due formati DUMPFILE (il formato ELF e il formato compresso kdump).
- Per impostazione predefinita, makedumpfile crea un DUMPFILE nel formato compresso con kdump.
- Il formato compresso con kdump può essere letto solo con l'utilità di arresto anomalo e può essere più piccolo del formato ELF a causa del supporto per la compressione.
- Il formato ELF è leggibile con GDB e l'utilità di crash.
- -c comprime i dati di dump di ogni pagina
- -d è il numero di pagine che non sono necessarie e possono essere ignorate.
Se rimuovi il commento dalla riga #default shell, la shell viene invocata se kdump non riesce a raccogliere il core. Quindi l'amministratore può prendere manualmente il core dump usando i comandi makedumpfile.
5. Riavvia i servizi kdump
Una volta configurato kdump, riavvia i servizi di kdump,
# service kdump restart Stopping kdump: [ OK ] Starting kdump: [ OK ] # service kdump status Kdump is operational
In caso di problemi nell'avvio dei servizi, il modulo kdump o il parametro crashkernel non sono stati impostati correttamente. Quindi, verifica /proc/cmdline e assicurati che rifletta per includere il valore del crashkernel.
6. Attiva manualmente il Core Dump
Puoi attivare manualmente il core dump utilizzando i seguenti comandi:
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
Il server si riavvierà e verrà generato il dump di arresto anomalo.
7. Visualizza i file principali
Una volta riavviato il server, vedrai che il file principale viene generato in /var/crash in base alla posizione definita in /var/crash.
Vedrai il file vmcore e 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. Analisi di Kdump usando crash
L'utilità Crash viene utilizzata per analizzare il file principale catturato da kdump.
Può anche essere utilizzato per analizzare i file core creati da altre utilità di dump come netdump, diskdump, xendump.
Devi assicurarti che il pacchetto "kernel-debuginfo" sia presente e sia allo stesso livello del kernel.
Avvia lo strumento di arresto anomalo come mostrato di seguito. Dopo aver eseguito questo comando, riceverai un prompt in contanti, in cui puoi eseguire i comandi di arresto anomalo:
# crash /var/crash/127.0.0.1-2014-03-26-12\:24\:39/vmcore /usr/lib/debug/lib/modules/`uname –r`/vmlinux crash>
9. Visualizza il processo in caso di arresto anomalo del sistema
Esegui il comando ps al prompt di arresto anomalo, che visualizzerà tutto il processo in esecuzione quando il sistema si è arrestato in modo anomalo.
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. Visualizza lo spazio di scambio quando il sistema va in crash
Esegui il comando di scambio al prompt di arresto anomalo, che mostrerà l'utilizzo dello spazio di scambio in caso di arresto anomalo del sistema.
crash> swap FILENAME TYPE SIZE USED PCT PRIORITY /dm-1 PARTITION 2064376k 0k 0% -1
11. Visualizza IPCS in caso di crash del sistema
Esegui il comando ipcs al prompt di arresto anomalo, che visualizzerà l'utilizzo della memoria condivisa in caso di arresto anomalo del sistema.
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. Visualizza IRQ in caso di crash del sistema
Esegui il comando irq al prompt di arresto anomalo, che visualizzerà le statistiche IRQ in caso di arresto anomalo del sistema.
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 – Questo comando converte un utente o un indirizzo virtuale del kernel nel suo indirizzo fisico.
foreach – Questo comando visualizza i dati per più attività nel sistema
waitq – Questo comando visualizza tutte le attività in coda su una coda di attesa.
13. Visualizza la memoria virtuale in caso di crash del sistema
Esegui il comando vm al prompt di arresto anomalo, che visualizzerà l'utilizzo della memoria virtuale in caso di arresto anomalo del sistema.
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. Visualizza i file aperti quando il sistema si arresta in modo anomalo
Esegui il comando file al prompt di arresto anomalo, che visualizzerà i file aperti in caso di arresto anomalo del sistema.
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. Visualizza le informazioni di sistema in caso di arresto anomalo del sistema
Esegui il comando sys al prompt di arresto anomalo, che visualizzerà le informazioni di sistema in caso di arresto anomalo del sistema.
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)