Crash-Dumps mit dem Kdump-Dienstprogramm sammeln
Wenn ein Oracle Linux-System eine Kernelpanik erlebt und unerwartet abstürzt oder hängt, können Informationen zum Systemstatus und zu Kernelaufrufen, die zum Absturz führen, für die Fehlerbehebung nützlich sein. Die Kdump-Funktion bietet einen Dumpingmechanismus für Kernel-Absturzinformationen. In Oracle Linux-Plattformimages ist das BS entweder vollständig konfiguriert oder teilweise so konfiguriert, dass ein Crashdump generiert wird, abhängig vom Releasedatum des Images.
Wenn Sie über ein eigenes Linux-Image oder ein Marketplace-Image verfügen, müssen Sie Kdump über die Befehlszeile installieren und konfigurieren.
Kdump enthält einen zweiten Kernel, der sich in einem reservierten Teil des Systemspeichers befindet, sodass er Informationen über einen gestoppten Kernel erfassen kann. Kdump bootet mit dem Systemaufruf kexec im zweiten Kernel, der als Capture-Kernel bezeichnet wird, ohne das System neu starten zu müssen, und erfasst dann den Inhalt des gestoppten Kernel-Speichers als Crash-Dump. Weitere Informationen zum Inhalt eines Crashdumps finden Sie unter Was befindet sich in einem Linux Kernel Core Dump.
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
kopiert. Für jeden Crashdump wird ein neues Verzeichnis <ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
erstellt. Beispiel: [opc@<instance_name> crash] ls -a
127.0.0.1-2025-02-07-15:18:07
127.0.0.1-2025-02-07-16:28:19
Das Dumpverzeichnis enthält die Crash-Dumpdatei vmcore
, eine Textdatei und eine Logdatei. Beispiel:[opc@<instance_name> <127.0.0.1-2025-02-07-16:28:19>] ls -a
vmcore
vmcore-dmesg.txt
kexec-dmesg.log
Wenn Sie eine Oracle Linux-Instanz haben, die nicht erreichbar ist oder nicht reagiert, können Sie eine Diagnoseunterbrechung zur Fehlerbehebung senden. Eine Diagnoseunterbrechung sorgt für den Absturz und Neustart des Betriebssystems der Instanz. Um eine Diagnoseunterbrechung mit der Konsole oder API zu senden, muss Kdump so konfiguriert sein, dass ein Crashdump generiert wird. Weitere Informationen finden Sie unter Senden einer Diagnoseunterbrechung.
Für einen Absturz-Dump reservierten Speicher festlegen
Wenn Sie ein Oracle Linux-Plattformimage verwenden, wird Kdump installiert und entweder vollständig konfiguriert oder teilweise konfiguriert. Sie können die im Kernel reservierte Speichermenge ändern, um den Crash-Dump (auch als crashkernel-Speicherreservierung bezeichnet) zu speichern. In Oracle Linux 8 und früher ist die Standardspeicherreservierung so eingestellt, dass sie automatisch angepasst wird: GRUB_CMDLINE_LINUX="crashkernel=auto"
. crashkernel=auto
wird jedoch für Oracle Linux 9 nicht unterstützt. Daher müssen Sie mit dem Parameter crashkernel
eine bestimmte Menge an reserviertem Speicher festlegen.
So legen Sie die Speicherreservierung für einen Crash-Dump fest:
- Über eine Befehlszeile mit administrativen Berechtigungen melden Sie sich mit SSH bei der Instanz an.
- Bearbeiten Sie die Datei
/etc/default/grub
, um den reservierten Speicher festzulegen. Beispiel:- Stellen Sie die Speicherreserve auf 64 MB ein. Beispiel:
GRUB_CMDLINE_LINUX="crashkernel=
64MB
" - Legen Sie die Größe des reservierten Speichers als Variable mit der
crashkernel=<range1>:<size1>,<range2>:<size2>
-Syntax fest. Beispiel:GRUB_CMDLINE_LINUX="crashkernel=512M-2G:64M,2G-:128M"
- Definieren Sie einen Offset-Wert für den reservierten Speicher. Da die Reservierung
crashkernel
bereits zu Beginn des Boot-Prozesses erfolgt, müssen bei einigen Systemen Speicher mit einem bestimmten festen Offset reserviert werden. Wenn ein fester Offset angegeben wird, beginnt der reservierte Speicher an diesem Punkt. Beispiel: So reservieren Sie ab 16 MB 128 MB Speicher:GRUB_CMDLINE_LINUX="crashkernel=128M@16M"
- Stellen Sie die Speicherreserve auf 64 MB ein. Beispiel:
- Speichern Sie die Änderungen, und aktualisieren Sie die grub-Konfiguration:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- Starten Sie die Instanz neu, um die Änderungen anzuwenden.
Speicherort für Absturz-Dump wird geändert
Mit /etc/kdump.conf
können Sie den Speicherort der Crashdumpdateien ändern, sie über SSH übertragen oder in eine Netzwerkfreigabe exportieren.
- Über eine Befehlszeile mit administrativen Berechtigungen melden Sie sich mit SSH bei der Instanz an.
- Bearbeiten Sie die Konfigurationsdatei in der Datei
/etc/kdump.conf
, und entfernen Sie das Kommentarzeichen#
am Anfang jeder Zeile, die Sie aktivieren möchten.- Ändern Sie das Standardverzeichnis (
/var/oled/crash
) für die Crash-Dumpdateien. Beispiel:path /usr/local/<cores>
- Übertragen Sie Crash-Dumpdateien über eine Secure Shell-Verbindung. Beispiel:
ssh <user@example.com> sshkey /root/.ssh/<mykey>
- Legen Sie die Crashdumpdateien fest, die in eine kompatible Netzwerkfreigabe exportiert werden sollen. Beispiel:
nfs <example.com>:/<output>
Weitere Informationen finden Sie in der Datei
kdump.conf.5
im Archiv/usr/share/man/man5/kdump.conf.5.gz
. - Ändern Sie das Standardverzeichnis (
- Wenn Sie fertig sind, speichern Sie die Änderungen, und starten Sie den Service
kdump
neu.sudo systemctl restart kdump.service
- Starten Sie die Instanz neu, um die Änderungen anzuwenden.
Standardfehlerstatus ändern
Wenn Kdump das Ergebnis standardmäßig nicht an die konfigurierten Ausgabespeicherorte sendet, wird der Server neu gestartet. Mit dieser Aktion werden alle Daten gelöscht, die für den Dump erfasst wurden. Um dieses Ergebnis zu verhindern, ändern Sie die Kdump-Konfiguration.
- Über eine Befehlszeile mit administrativen Berechtigungen melden Sie sich mit SSH bei der Instanz an.
- Bearbeiten Sie
/etc/kdump.conf
, um die Kommentarzeichen zu entfernen und den Wertdefault
in der Datei wie folgt zu ändern:default dump_to_rootfs
Die Option
dump_to_rootfs
versucht, das Ergebnis in einem lokalen Verzeichnis zu speichern. Dies kann nützlich sein, wenn eine Netzwerkfreigabe nicht erreichbar ist. Sie können stattdessenshell
verwenden, um die Daten manuell aus der Befehlszeile zu kopieren.Hinweis
Die Optionen
poweroff
,restart
undhalt
sind auch für den Standardfehlerstatuskdump
gültig. Wenn Sie diese Aktionen ausführen, gehen jedoch die erfassten Daten verloren, wenn diese Aktionen ausgeführt werden. Weitere Informationen finden Sie in der Dateikdump.conf.5
im Archiv/usr/share/man/man5/kdump.conf.5.gz
. - Wenn Sie fertig sind, speichern Sie die Änderungen, und starten Sie den Service
kdump
neu.sudo systemctl restart kdump.service
- Starten Sie die Instanz neu, um die Änderungen anzuwenden.
Absturzdump auslösen
Testen Sie die Kdump-Konfiguration, indem Sie den Kernel abstürzen, der den Dienst zum Erfassen eines Crashdumps auslöst. Überprüfen Sie dann den Crash-Dump.
- Über eine Befehlszeile mit administrativen Berechtigungen melden Sie sich mit SSH bei der Instanz an.
- Stellen Sie sicher, dass Kdump ausgeführt wird:
systemctl is-active kdump
- Starten Sie den Absturz über die Konsole oder die Befehlszeile:Dadurch wird der Kernel zum Absturz gezwungen, und die Dumpdateien werden standardmäßig in das Verzeichnis
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
oder in den von Ihnen in der Konfiguration ausgewählten Speicherort kopiert. - Starten Sie die Instanz neu.
- Melden Sie sich mit SSH erneut bei der Instanz an, und prüfen Sie die Crashdumpdateien in der Datei
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
:- Der Kernel-Nachrichtenpuffer enthält die wichtigsten Informationen zum Systemabsturz und wird immer zuerst in die Datei
vmcore-dmesg.txt
geschrieben. Dies ist nützlich, wenn ein Versuch, die vollständigevmcore
-Datei abzurufen, nicht erfolgreich verläuft, z.B. aufgrund von Speicherplatzmangel am Zielspeicherort. - Wenn das
kexec
-Tool in den zweiten Kernel bootet und den Inhalt des abgestürzten Kernel-Speichers erfasst, wird es auch in die Dateikexec-dmes.log
geschrieben, damit Sie den Prozess verfolgen können. Beispiel: Am Ende der Datei wird der Speicherprozess für den Crash-Dump angezeigt:... Feb 07 16:28:19 linux9 systemd[1]: Starting Kdump Vmcore Save Service... Feb 07 16:28:19 linux9 kdump[504]: Kdump is using the default log level(3). Feb 07 16:28:19 linux9 kdump[541]: saving to /kdumproot/var/oled/crash/127.0.0.1-2025-02-07-16:28:19/ Feb 07 16:28:19 linux9 kdump[546]: saving vmcore-dmesg.txt to /kdumproot/var/oled/crash/127.0.0.1-2025-02-07-16:28:19/ Feb 07 16:28:19 linux9 kdump[552]: saving vmcore-dmesg.txt complete Feb 07 16:28:19 linux9 kdump[554]: saving vmcore Feb 07 16:28:21 linux9 kdump.sh[555]: Checking for memory holes : [ 0.0 %] / ... Copying data : [100.0 %] \ eta: 0s Feb 07 16:28:21 linux9 kdump.sh[555]: The dumpfile is saved to /kdumproot/var/oled/crash/127.0.0.1-2025-02-07-16:28:19//vmcore-incomplete. Feb 07 16:28:21 linux9 kdump.sh[555]: makedumpfile Completed. Feb 07 16:28:21 linux9 kdump[559]: saving vmcore complete Feb 07 16:28:21 linux9 kdump[561]: saving the /run/initramfs/kexec-dmesg.log to /kdumproot/var/oled/crash/127.0.0.1-2025-02-07-16:28:19//
- Die Datei
vmcore
enthält die Crashdumpinformationen. Um den Crashdump zu analysieren, benötigen Sie ein Utility, das das Dateiformatvmcore
lesen kann. Informationen zur Verwendung des Utilityscrash
finden Sie unter Absturzdumps analysieren.
- Der Kernel-Nachrichtenpuffer enthält die wichtigsten Informationen zum Systemabsturz und wird immer zuerst in die Datei
Crash-Dumps analysieren
Mit dem Utility crash
können Sie die von Kdump erfassten Crashdumps analysieren. In Oracle Linux-Plattformimages ist crash
standardmäßig installiert. Bei anderen Linux-Instanzen installieren Sie es mit der Befehlszeile: sudo dnf install crash
.
Oracle Linux-Instanz zur Verwendung des Crashutilitys konfigurieren
Um einen Crashdump mit crash
zu analysieren, führen Sie die folgenden Konfigurationsaufgaben aus:
- Verwenden Sie in einer Befehlszeile die administrativen Berechtigungen, und melden Sie sich mit SSH bei der Instanz an.
- Aktivieren Sie das Oracle Linux-Repository
debuginfo
, indem Sie die Datei/etc/yum.repos.d/debuginfo.repo
mit Root-Berechtigungen und den folgenden Inhalten erstellen. Beispiel:[debuginfo] name=Oracle Linux 8 Debuginfo Packages baseurl=https://oss.oracle.com/ol8/debuginfo/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle gpgcheck=1 enabled=1
- Aktualisieren Sie das System:
sudo dnf update -y
- Installieren Sie das Package
kernel-uek-debuginfo
:sudo dnf install -y kernel-uek-debuginfo-$(uname -r)
Wichtig
Führen Sie den Installationsbefehl jedes Mal aus, wenn der Kernel über den Package Manager aktualisiert wird. Das Packagedebuginfo
funktioniert nur, wenn es mit dem laufenden Kernel übereinstimmt. Es wird nicht automatisch ersetzt, wenn eine neuere Kernelversion auf dem System installiert wird.
Crash-Dump mit dem Absturz-Utility analysieren
Um einen Crashdump zu analysieren, geben Sie die vmcore
-Informationen an crash
an, und rufen Sie dann mit den Shell-Optionen crash
Crashdumpinformationen ab. Ausführliche Informationen zur Verwendung des crash-Utilitys finden Sie unter man crash
an einer Eingabeaufforderung oder in der Crash-Dokumentation.
- Verwenden Sie in einer Befehlszeile die administrativen Berechtigungen, und melden Sie sich mit SSH bei der Instanz an.
- Geben Sie den Speicherort des Kernel-
debuginfo
-Moduls und den Speicherort des Core-Dumps als Parameter für das crash-Utility an. Beispiel:sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>/vmcore
$(uname -r) gibt die laufende Kernelversion innerhalb des Befehls an,
<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
stellt das Verzeichnis dar, das für die Crashdumpdateien erstellt wird, und die Dateivmcore
enthält den Crashdump.Die
crash
-Shell wird gestartet und zeigt einige Informationen zum Systemabsturz an, wie:KERNEL: /usr/lib/debug/lib/modules/5.15.0-302.167.6.el9uek.x86_64/vmlinux DUMPFILE: /var/oled/crash/127.0.0.1-2025-02-07-16:28:19/vmcore [PARTIAL DUMP] CPUS: 2 DATE: Fri Feb 7 16:28:15 GMT 2025 UPTIME: 01:09:58 LOAD AVERAGE: 0.00, 0.02, 0.00 TASKS: 204 NODENAME: oci-linux9 RELEASE: 5.15.0-302.167.6.el9uek.x86_64 VERSION: #2 SMP Mon Nov 4 23:41:59 PST 2024 MACHINE: x86_64 (2445 Mhz) MEMORY: 16 GB PANIC: "Kernel panic - not syncing: NMI: Not continuing" PID: 0 COMMAND: "swapper/0" TASK: ffffffffb761a980 (1 of 2) [THREAD_INFO: ffffffffb761a980] CPU: 0 STATE: TASK_RUNNING (PANIC) crash>
- Geben Sie an der Eingabeaufforderung
crash
eine Option ein, um weitere Informationen zum Crashdump abzurufen. Beispiel:bt -a
zeigt ein Stacktrace der aktiven Aufgaben an, wenn der Kernel einen Panikhinweis aufweist. Beispiel:crash> bt -a PID: 286 TASK: c0b3a000 CPU: 0 COMMAND: "in.rlogind" #0 [c0b3be90] crash_save_current_state at c011aed0 #1 [c0b3bea4] panic at c011367c #2 [c0b3bee8] tulip_interrupt at c01bc820 #3 [c0b3bf08] handle_IRQ_event at c010a551 #4 [c0b3bf2c] do_8259A_IRQ at c010a319 #5 [c0b3bf3c] do_IRQ at c010a653 #6 [c0b3bfbc] ret_from_intr at c0109634 EAX: 00000000 EBX: c0e68280 ECX: 00000000 EDX: 00000004 EBP: c0b3bfbc DS: 0018 ESI: 00000004 ES: 0018 EDI: c0e68284 CS: 0010 EIP: c012f803 ERR: ffffff09 EFLAGS: 00000246 #7 [c0b3bfbc] sys_select at c012f803 #8 [c0b3bfc0] system_call at c0109598 EAX: 0000008e EBX: 00000004 ECX: bfffc9a0 EDX: 00000000 DS: 002b ESI: bfffc8a0 ES: 002b EDI: 00000000 SS: 002b ESP: bfffc82c EBP: bfffd224 CS: 0023 EIP: 400d032e ERR: 0000008e EFLAGS: 00000246
ps -A
zeigt nur die aktive Aufgabe auf jeder CPU an. Beispiel:crash> ps -A PID PPID CPU TASK ST %MEM VSZ RSS COMM > 10 2 1 ffff880212969710 IN 0.0 0 0 [migration/1] > 0 0 3 ffff884026d43520 RU 0.0 0 0 [swapper] > 6582 1 2 ffff880f49c52040 RU 0.0 42202472 33368 oracle > 9497 1 0 ffff880549ec2ab0 RU 0.0 42314692 138664 oracle
vm
zeigt grundlegende Informationen zum virtuellen Speicher des aktuellen Kontextes an. Beispiel:crash> vm PID: 30986 TASK: c0440000 CPU: 0 COMMAND: "bash" MM PGD RSS TOTAL_VM c303fe20 c4789000 88k 1728k VMA START END FLAGS FILE c0d1f540 8048000 80ad000 1875 /bin/bash c0d1f400 80ad000 80b3000 1873 /bin/bash c0d1f880 80b3000 80ec000 77 c0d1f0c0 40000000 40012000 875 /lib/ld-2.1.1.so c0d1f700 40012000 40013000 873 /lib/ld-2.1.1.so c0d1fe00 40013000 40014000 77 c0d1f580 40014000 40016000 73 ...
files
zeigt Informationen zu geöffneten Dateien im aktuellen Kontext an.crash> files PID: 720 TASK: c67f2000 CPU: 1 COMMAND: "innd" ROOT: / CWD: /var/spool/news/articles FD FILE DENTRY INODE TYPE PATH 0 c6b9c740 c7cc45a0 c7c939e0 CHR /dev/null 1 c6b9c800 c537bb20 c54d0000 REG /var/log/news/news 2 c6df9600 c537b420 c5c36360 REG /var/log/news/errlog 3 c74182c0 c6ede260 c6da3d40 PIPE 4 c6df9720 c696c620 c69398c0 SOCK 5 c6b9cc20 c68e7000 c6938d80 SOCK 6 c6b9c920 c7cc45a0 c7c939e0 CHR /dev/null 7 c6b9c680 c58fa5c0 c58a1200 REG /var/lib/news/history 8 c6df9f00 c6ede760 c6da3200 PIPE
kmem -i
zeigt Informationen zur Kernel-Speicherauslastung an. Beispiel:crash> kmem -i PAGES TOTAL PERCENTAGE TOTAL MEM 1974231 7.5 GB ---- FREE 208962 816.3 MB 10% of TOTAL MEM USED 1765269 6.7 GB 89% of TOTAL MEM SHARED 365066 1.4 GB 18% of TOTAL MEM BUFFERS 111376 435.1 MB 5% of TOTAL MEM CACHED 1276196 4.9 GB 64% of TOTAL MEM SLAB 120410 470.4 MB 6% of TOTAL MEM TOTAL HUGE 524288 2 GB ---- HUGE FREE 524288 2 GB 100% of TOTAL HUGE TOTAL SWAP 2498559 9.5 GB ---- SWAP USED 81978 320.2 MB 3% of TOTAL SWAP SWAP FREE 2416581 9.2 GB 96% of TOTAL SWAP COMMIT LIMIT 3485674 13.3 GB ---- COMMITTED 850651 3.2 GB 24% of TOTAL LIMIT
- Wenn Sie mit der Analyse des Core-Dumps fertig sind, beenden Sie die Shell, indem Sie exit oder q eingeben.