GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verwenden Sie kdump für die Linux-Kernel-Crash-Analyse

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.

beginnt
core_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)

Linux
  1. So verwenden Sie BusyBox unter Linux

  2. So verwenden Sie erweitertes rsync für große Linux-Backups

  3. So verwenden Sie systemd-nspawn für die Linux-Systemwiederherstellung

  4. So verwenden Sie Unzip unter Linux

  5. Linux – Wie benutzt man Swap Space nur für Notfälle?

So verwenden Sie den Linux-nohup-Befehl

So verwenden Sie Traceroute unter Kali Linux

So verwenden Sie den Linux-Bildschirm

So suchen Sie unter Linux nach Listening Ports (Ports in use)

Verschiedene Arten von Kernel für Arch Linux und wie man sie verwendet

So installieren Sie Zenoss Core für die Überwachung unter Linux CentOS / RHEL