Kdump ist ein Dienstprogramm, das zum Erfassen des System-Core-Dump im Falle eines Systemabsturzes verwendet wird.
Diese erfassten Core-Dumps können später verwendet werden, um die genaue Ursache des Systemausfalls zu analysieren und die notwendige Lösung zu implementieren, um die Abstürze in Zukunft zu verhindern.
Kdump reserviert einen kleinen Teil des Speichers für den sekundären Kernel namens Crashkernel.
Dieser sekundäre oder Crash-Kernel wird verwendet, um das Core-Dump-Image zu erfassen, wenn das System abstürzt.
1. Installieren Sie die Kdump-Tools
Installieren Sie zuerst kdump, das Teil des Pakets kexec-tools ist.
# yum install kexec-tools
2. Crashkernel in grub.conf einstellen
Bearbeiten Sie nach der Installation des Pakets die Datei /boot/grub/grub.conf und legen Sie fest, wie viel Speicher für den kdump-Crash-Kernel reserviert werden soll.
Sie können die Datei /boot/grub/grub.conf für den Wert crashkernel bearbeiten und ihn entweder auf auto oder einen benutzerdefinierten Wert setzen. Es wird empfohlen, mindestens 128 MB für eine Maschine mit 2 GB Speicher oder mehr zu verwenden.
Suchen Sie im folgenden Beispiel nach der Zeile, die mit „kernel“ beginnt, wo sie auf „crashkernel=auto“ gesetzt ist.
# 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. Dump-Speicherort konfigurieren
Sobald der Kernel abstürzt, kann der Core-Dump basierend auf den in /etc/kdump.conf definierten Einstellungen im lokalen Dateisystem oder Remote-Dateisystem (NFS) erfasst werden (im SLES-Betriebssystem lautet der Pfad /etc/sysconfig/kdump).
Diese Datei wird automatisch erstellt, wenn das Paket kexec-tools installiert wird.
Alle Einträge in dieser Datei werden standardmäßig auskommentiert. Sie können diejenigen auskommentieren, die für Ihre besten Optionen benötigt werden.
# 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
In der obigen Datei:
- Um den Dump auf ein Raw-Gerät zu schreiben, können Sie „raw /dev/sda5“ auskommentieren und so ändern, dass er auf den korrekten Speicherort des Dumps zeigt.
- Wenn Sie den Pfad des Dump-Speicherorts ändern möchten, entfernen Sie das Kommentarzeichen und ändern Sie „Pfad /var/crash“, um auf den neuen Speicherort zu verweisen.
- Für NFS können Sie „#net my.server.com:/export/tmp“ auskommentieren und auf den aktuellen Standort des NFS-Servers verweisen.
4. Core Collector konfigurieren
Der nächste Schritt besteht darin, den Core Collector in der Kdump-Konfigurationsdatei zu konfigurieren. Es ist wichtig, die erfassten Daten zu komprimieren und alle unnötigen Informationen aus der erfassten Kerndatei herauszufiltern.
Um den Core Collector zu aktivieren, kommentieren Sie die folgende Zeile aus, die mit core_collector.
beginntcore_collector makedumpfile -c --message-level 1 -d 31
- makedumpfile, das in core_collector angegeben ist, erstellt tatsächlich eine kleine DUMPFILE durch Komprimieren der Daten.
- makedumpfile bietet zwei DUMPFILE-Formate (das ELF-Format und das kdump-komprimierte Format).
- Makedumpfile erstellt standardmäßig eine DUMPFILE im kdump-komprimierten Format.
- Das kdump-komprimierte Format kann nur mit dem Crash-Dienstprogramm gelesen werden und kann aufgrund der Komprimierungsunterstützung kleiner als das ELF-Format sein.
- Das ELF-Format ist mit GDB und dem Crash-Dienstprogramm lesbar.
- -c komprimiert Dump-Daten pro Seite
- -d ist die Anzahl der Seiten, die unnötig sind und ignoriert werden können.
Wenn Sie die Zeile #default Shell auskommentieren, wird die Shell aufgerufen, wenn der kdump den Kern nicht sammeln kann. Dann kann der Administrator den Core-Dump mithilfe von makedumpfile-Befehlen manuell erstellen.
5. Starten Sie die kdump-Dienste neu
Sobald kdump konfiguriert ist, starten Sie die kdump-Dienste neu,
# service kdump restart Stopping kdump: [ OK ] Starting kdump: [ OK ] # service kdump status Kdump is operational
Wenn Sie Probleme beim Starten der Dienste haben, wurde das kdump-Modul oder der Crashkernel-Parameter nicht richtig eingerichtet. Überprüfen Sie also /proc/cmdline und stellen Sie sicher, dass es den Crashkernel-Wert enthält.
6. Core Dump manuell auslösen
Sie können den Core-Dump manuell mit den folgenden Befehlen auslösen:
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
Der Server wird neu gestartet und der Crash-Dump wird generiert.
7. Sehen Sie sich die Kerndateien an
Nach dem Neustart des Servers sehen Sie, dass die Kerndatei unter /var/crash basierend auf dem in /var/crash definierten Speicherort generiert wird.
Sie sehen vmcore und die Datei 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-Analyse mit Crash
Das Crash-Dienstprogramm wird verwendet, um die von kdump erfasste Kerndatei zu analysieren.
Es kann auch verwendet werden, um die Kerndateien zu analysieren, die von anderen Dump-Dienstprogrammen wie netdump, diskdump, xendump erstellt wurden.
Sie müssen sicherstellen, dass das Paket „kernel-debuginfo“ vorhanden ist und sich auf derselben Ebene wie der Kernel befindet.
Starten Sie das Crash-Tool wie unten gezeigt. Nachdem Sie diesen Befehl ausgeführt haben, erhalten Sie eine Eingabeaufforderung, in der Sie Absturzbefehle ausführen können:
# crash /var/crash/127.0.0.1-2014-03-26-12\:24\:39/vmcore /usr/lib/debug/lib/modules/`uname –r`/vmlinux crash>
9. Prozess bei Systemabsturz anzeigen
Führen Sie den Befehl ps an der Absturz-Eingabeaufforderung aus, wodurch alle laufenden Prozesse angezeigt werden, wenn das System abgestürzt ist.
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. Auslagerungsbereich bei Systemabsturz anzeigen
Führen Sie den Swap-Befehl an der Absturz-Eingabeaufforderung aus, der die Auslagerungsspeichernutzung anzeigt, als das System abstürzte.
crash> swap FILENAME TYPE SIZE USED PCT PRIORITY /dm-1 PARTITION 2064376k 0k 0% -1
11. IPCS bei Systemabsturz anzeigen
Führen Sie den ipcs-Befehl an der Absturz-Eingabeaufforderung aus, der die gemeinsam genutzte Speichernutzung anzeigt, als das System abstürzte.
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. IRQ bei Systemabsturz anzeigen
Führen Sie den irq-Befehl am Crash-Prompt aus, der die IRQ-Statistiken anzeigt, wenn das System abgestürzt ist.
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 – Dieser Befehl übersetzt eine virtuelle Benutzer- oder Kerneladresse in ihre physische Adresse.
foreach – Dieser Befehl zeigt Daten für mehrere Tasks im System an
waitq – Dieser Befehl zeigt alle Tasks an, die in einer Warteschlange anstehen.
13. Anzeigen des virtuellen Speichers bei Systemabsturz
Führen Sie den vm-Befehl an der Absturz-Eingabeaufforderung aus, der die virtuelle Speichernutzung anzeigt, als das System abstürzte.
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. Zeigen Sie die geöffneten Dateien an, wenn das System abgestürzt ist
Führen Sie den Dateibefehl an der Absturz-Eingabeaufforderung aus, der die geöffneten Dateien anzeigt, wenn das System abgestürzt ist.
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. Systeminformationen anzeigen, wenn das System abgestürzt ist
Führen Sie den sys-Befehl am Crash-Prompt aus, der Systeminformationen anzeigt, wenn das System abgestürzt ist.
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)