GNU/Linux >> Znalost Linux >  >> Linux

Jak používat kdump pro analýzu pádů jádra Linuxu

Kdump je nástroj používaný k zachycení výpisu jádra systému v případě selhání systému.

Tyto zachycené výpisy jádra lze později použít k analýze přesné příčiny selhání systému a implementaci nezbytné opravy, aby se předešlo pádům v budoucnu.

Kdump rezervuje malou část paměti pro sekundární jádro zvané crashkernel.

Toto sekundární nebo zhroucené jádro se používá k zachycení obrazu výpisu jádra při každém zhroucení systému.

1. Nainstalujte Kdump Tools

Nejprve nainstalujte kdump, který je součástí balíčku kexec-tools.

# yum install kexec-tools

2. Nastavte crashkernel v grub.conf

Jakmile je balíček nainstalován, upravte soubor /boot/grub/grub.conf a nastavte množství paměti, které má být vyhrazeno pro jádro kdump crash.

Můžete upravit /boot/grub/grub.conf pro hodnotu crashkernel a nastavit ji buď na auto, nebo na hodnotu zadanou uživatelem. Pro počítač s pamětí 2G nebo vyšší se doporučuje použít minimálně 128M.

V následujícím příkladu vyhledejte řádek začínající na „kernel“, kde je nastaveno na „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. Konfigurace umístění výpisu

Jakmile se jádro zhroutí, výpis jádra lze zachytit do místního souborového systému nebo vzdáleného souborového systému (NFS) na základě nastavení definovaných v /etc/kdump.conf (v operačním systému SLES je cesta /etc/sysconfig/kdump).

Tento soubor se automaticky vytvoří při instalaci balíčku kexec-tools.

Všechny položky v tomto souboru budou ve výchozím nastavení zakomentovány. Můžete odkomentovat ty, které jsou potřeba pro vaše nejlepší možnosti.

# 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

Ve výše uvedeném souboru:

  • Chcete-li zapsat výpis do nezpracovaného zařízení, můžete odkomentovat „raw /dev/sda5“ a změnit jej tak, aby ukazoval na správné umístění výpisu.
  • Pokud chcete změnit cestu umístění výpisu, zrušte komentář a změňte „cesta /var/crash“ tak, aby ukazoval na nové umístění.
  • U NFS můžete odkomentovat „#net my.server.com:/export/tmp“ a ukázat na aktuální umístění serveru NFS.

4. Konfigurace Core Collector

Dalším krokem je konfigurace kolektoru jádra v konfiguračním souboru Kdump. Je důležité komprimovat zachycená data a odfiltrovat všechny nepotřebné informace ze zachyceného souboru jádra.

Chcete-li povolit kolektor jádra, odkomentujte následující řádek, který začíná řetězcem core_collector.

core_collector makedumpfile -c --message-level 1 -d 31
  • makedumpfile zadaný v core_collector ve skutečnosti vytváří malý DUMPFILE komprimací dat.
  • makedumpfile poskytuje dva formáty DUMPFILE (formát ELF a formát komprimovaný kdump).
  • Ve výchozím nastavení vytváří makedumpfile DUMPFILE ve formátu komprimovaném kdump.
  • Formát komprimovaný kdump lze číst pouze pomocí nástroje crash a může být menší než formát ELF kvůli podpoře komprese.
  • Formát ELF je čitelný pomocí GDB a nástroje pro zhroucení.
  • -c je komprimovat data výpisu pro každou stránku
  • -d je počet stránek, které jsou zbytečné a lze je ignorovat.

Pokud odkomentujete řádek #default shell, pak se shell vyvolá, pokud kdump selže shromáždit jádro. Poté může administrátor ručně provést výpis jádra pomocí příkazů makedumpfile.

5. Restartujte služby kdump

Jakmile je kdump nakonfigurován, restartujte služby kdump

# service kdump restart
Stopping kdump:   [  OK  ]
Starting kdump:   [  OK  ]

# service kdump status
Kdump is operational

Pokud máte nějaké problémy se spouštěním služeb, pak modul kdump nebo parametr crashkernelu nebyl správně nastaven. Takže ověřte /proc/cmdline a ujistěte se, že to odpovídá zahrnutí hodnoty crashkernelu.

6. Ručně spusťte Core Dump

Výpis jádra můžete spustit ručně pomocí následujících příkazů:

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

Server se sám restartuje a vygeneruje se výpis zhroucení.

7. Zobrazit základní soubory

Jakmile je server restartován, uvidíte, že základní soubor je vygenerován pod /var/crash na základě umístění definovaného v /var/crash.

Uvidíte soubor vmcore a 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. Kdump analýza pomocí crash

Nástroj Crash se používá k analýze souboru jádra zachyceného programem kdump.

Lze jej také použít k analýze základních souborů vytvořených jinými nástroji pro výpis paměti, jako jsou netdump, diskdump, xendump.

Musíte se ujistit, že je přítomen balíček „kernel-debuginfo“ a že je na stejné úrovni jako jádro.

Spusťte nástroj pro zhroucení, jak je znázorněno níže. Po zadání tohoto příkazu se zobrazí výzva k vyplacení hotovosti, kde můžete provést příkazy k selhání:

# crash /var/crash/127.0.0.1-2014-03-26-12\:24\:39/vmcore /usr/lib/debug/lib/modules/`uname –r`/vmlinux

crash>

9. Zobrazit proces při zhroucení systému

Spusťte příkaz ps při zhroucení systému, který zobrazí všechny běžící procesy, když systém havaroval.

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. Zobrazit odkládací prostor při zhroucení systému

Spusťte příkaz swap při zhroucení, který zobrazí využití odkládacího prostoru při zhroucení systému.

crash> swap
FILENAME           TYPE         SIZE      USED   PCT  PRIORITY
/dm-1            PARTITION    2064376k       0k   0%     -1

11. Zobrazit IPCS při zhroucení systému

Spusťte příkaz ipcs při zhroucení systému, který zobrazí využití sdílené paměti při zhroucení systému.

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. Zobrazit IRQ při selhání systému

Spusťte příkaz irq při zhroucení systému, který zobrazí statistiky IRQ při zhroucení systému.

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 – Tento příkaz přeloží virtuální adresu uživatele nebo jádra na její fyzickou adresu.
foreach – Tento příkaz zobrazí data pro více úloh v systému
waitq – Tento příkaz zobrazí všechny úlohy zařazené do fronty čekání.

13. Zobrazení virtuální paměti při zhroucení systému

Při zhroucení spusťte příkaz vm, který zobrazí využití virtuální paměti při zhroucení systému.

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. Zobrazit otevřené soubory při zhroucení systému

Při zhroucení systému spusťte příkaz files, který zobrazí otevřené soubory při zhroucení systému.

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. Zobrazení systémových informací při zhroucení systému

Při zhroucení spusťte příkaz sys, který zobrazí systémové informace, když systém havaruje.

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. Jak používat BusyBox na Linuxu

  2. Jak používám cron v Linuxu

  3. Jak používat FIND v Linuxu

  1. Jak používat pokročilý rsync pro velké zálohy Linuxu

  2. Jak používat systemd-nspawn pro obnovu systému Linux

  3. Jak používat Su Command v Linuxu

  1. Jak používám nastavení usnadnění přístupu v systému Linux

  2. Jak používat Unzip v Linuxu

  3. Linux – Jak používat swapovací prostor pouze v případě nouze?