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)