GNU/Linux >> Linux Esercitazione >  >> Linux

Come usare kdump per l'analisi del crash del kernel Linux

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)

Linux
  1. Come usare BusyBox su Linux

  2. Come uso cron in Linux

  3. Come utilizzare Advanced rsync per backup Linux di grandi dimensioni

  4. Come utilizzare systemd-nspawn per il ripristino del sistema Linux

  5. Linux:come utilizzare lo spazio di scambio solo per le emergenze?

Come usare il comando nohup di Linux

Come usare traceroute su Kali Linux

Come utilizzare lo schermo Linux

Come controllare le porte di ascolto in Linux (porte in uso)

Diversi tipi di kernel per Arch Linux e come usarli

Come installare Zenoss Core per il monitoraggio su Linux CentOS / RHEL