Collecte des vidages sur incident à l'aide de l'utilitaire Kdump
Lorsqu'un système Oracle Linux subit une panique du noyau et tombe en panne de manière inattendue ou se bloque, des informations sur l'état du système et les appels du noyau menant à la panne peuvent être utiles pour le dépannage. La fonction Kdump fournit un mécanisme de vidage pour les informations de panne du noyau. Dans les images de plate-forme Oracle Linux, le système d'exploitation est entièrement ou partiellement configuré pour générer un fichier dump d'incident, en fonction de la date de publication de l'image.
Si vous disposez de votre propre image Linux ou d'une image Marketplace, vous devez installer et configurer Kdump à l'aide de la ligne de commande.
Kdump inclut un second noyau, qui réside dans une partie réservée de la mémoire système, afin qu'il puisse capturer des informations sur un noyau arrêté. Kdump utilise l'appel système kexec pour initialiser dans le second noyau, appelé noyau de capture, sans avoir à réinitialiser le système, puis capture le contenu de la mémoire du noyau arrêté en tant que vidage sur incident. Pour plus d'informations sur le contenu d'un vidage sur incident, reportez-vous à la section What's Inside a Linux Kernel Core Dump.
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
, par défaut. Un répertoire <ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
est créé pour chaque vidage sur incident, par exemple : [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
Le répertoire de vidage contient le fichier de vidage sur incident, vmcore
, un fichier texte et un fichier journal, par exemple :[opc@<instance_name> <127.0.0.1-2025-02-07-16:28:19>] ls -a
vmcore
vmcore-dmesg.txt
kexec-dmesg.log
Si une instance Oracle Linux est inaccessible ou ne répond pas, vous pouvez envoyer une interruption de diagnostic pour dépanner. L'interruption de diagnostic entraîne le blocage et le redémarrage du système d'exploitation de l'instance. Pour utiliser la console ou l'API afin d'envoyer une interruption de diagnostic, Kdump doit être configuré pour générer un vidage sur incident. Pour plus d'informations, reportez-vous à la section Sending a diagnostic interrupt.
Définition de la mémoire réservée pour un vidage sur incident
Si vous utilisez une image de plate-forme Oracle Linux, Kdump est installé et entièrement ou partiellement configuré. Vous pouvez modifier la quantité de mémoire réservée sur le noyau pour enregistrer le vidage sur incident, également appelée réservation de mémoire crashkernel. Dans Oracle Linux 8 et les versions antérieures, la réservation de mémoire par défaut est définie pour s'ajuster automatiquement : GRUB_CMDLINE_LINUX="crashkernel=auto"
. Cependant, crashkernel=auto
n'est pas pris en charge pour Oracle Linux 9. Vous devez donc définir une quantité spécifique de mémoire réservée à l'aide du paramètre crashkernel
.
Pour définir la réservation de mémoire pour un vidage sur incident :
- A partir d'une ligne de commande, à l'aide des privilèges d'administration, connectez-vous à l'instance à l'aide de SSH.
- Modifiez le fichier
/etc/default/grub
pour définir la mémoire réservée. Par exemple :- Définissez la réserve de mémoire sur 64 Mo, par exemple :
GRUB_CMDLINE_LINUX="crashkernel=
64MB
" - Définissez la quantité de mémoire réservée en tant que variable à l'aide de la syntaxe
crashkernel=<range1>:<size1>,<range2>:<size2>
. Par exemple :GRUB_CMDLINE_LINUX="crashkernel=512M-2G:64M,2G-:128M"
- Définissez une valeur de décalage pour la mémoire réservée. Etant donné que la réservation
crashkernel
a lieu au début du processus d'initialisation, certains systèmes nécessitent que vous réserviez de la mémoire avec un certain décalage fixe. Lorsqu'un décalage fixe est spécifié, la mémoire réservée commence à ce point. Par exemple, pour réserver 128 Mo de mémoire, à partir de 16 Mo :GRUB_CMDLINE_LINUX="crashkernel=128M@16M"
- Définissez la réserve de mémoire sur 64 Mo, par exemple :
- Enregistrez les modifications et actualisez la configuration grub :
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- Redémarrez l'instance pour appliquer les modifications.
Modification de l'emplacement du vidage sur incident
A l'aide de /etc/kdump.conf
, vous pouvez modifier l'emplacement dans lequel les fichiers de vidage sur incident sont enregistrés, les transférer via SSH ou les exporter vers un partage réseau.
- A partir d'une ligne de commande, à l'aide des privilèges d'administration, connectez-vous à l'instance à l'aide de SSH.
- Modifiez le fichier de configuration dans le fichier
/etc/kdump.conf
et enlevez le caractère de commentaire#
au début de chaque ligne à activer.- Modifiez le répertoire par défaut (
/var/oled/crash
) des fichiers de vidage sur incident, par exemple :path /usr/local/<cores>
- Transférez les fichiers de vidage sur incident via une connexion shell sécurisée, par exemple :
ssh <user@example.com> sshkey /root/.ssh/<mykey>
- Définissez les fichiers de vidage sur incident à exporter vers un partage réseau compatible, par exemple :
nfs <example.com>:/<output>
Pour plus d'informations, reportez-vous au fichier
kdump.conf.5
dans l'archive/usr/share/man/man5/kdump.conf.5.gz
. - Modifiez le répertoire par défaut (
- Lorsque vous avez terminé, enregistrez les modifications et redémarrez le service
kdump
.sudo systemctl restart kdump.service
- Redémarrez l'instance pour appliquer les modifications.
Modification de l'état d'échec par défaut
Par défaut, si Kdump ne parvient pas à envoyer son résultat aux emplacements de sortie configurés, il réinitialise le serveur. Cette action supprime toutes les données collectées pour le vidage. Pour éviter ce résultat, modifiez la configuration de Kdump.
- A partir d'une ligne de commande, à l'aide des privilèges d'administration, connectez-vous à l'instance à l'aide de SSH.
- Modifiez
/etc/kdump.conf
pour annuler la mise en commentaire et modifiez la valeurdefault
dans le fichier comme suit :default dump_to_rootfs
L'option
dump_to_rootfs
tente d'enregistrer le résultat dans un répertoire local, ce qui peut être utile si un partage réseau est inaccessible. Vous pouvez utilisershell
à la place pour copier les données manuellement à partir de la ligne de commande.Remarque
Les options
poweroff
,restart
ethalt
sont également valides pour l'état d'écheckdump
par défaut. Toutefois, l'exécution de ces actions entraîne la perte des données collectées si ces actions sont effectuées. Pour plus d'informations, reportez-vous au fichierkdump.conf.5
dans l'archive/usr/share/man/man5/kdump.conf.5.gz
. - Lorsque vous avez terminé, enregistrez les modifications et redémarrez le service
kdump
.sudo systemctl restart kdump.service
- Redémarrez l'instance pour appliquer les modifications.
Déclenchement d'un vidage sur incident
Testez la configuration du vidage sur incident en plantant le noyau qui déclenche le service pour collecter un vidage sur incident. Passez ensuite en revue le vidage sur incident.
- A partir d'une ligne de commande, à l'aide des privilèges d'administration, connectez-vous à l'instance à l'aide de SSH.
- Assurez-vous que Kdump est en cours d'exécution :
systemctl is-active kdump
- Lancez la panne à partir de la console ou de la ligne de commande :Cela force le noyau à planter et les fichiers dump sont copiés dans le répertoire
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
, par défaut, ou à l'emplacement que vous avez sélectionné dans la configuration. - Redémarrer l'instance.
- Reconnectez-vous à l'instance à l'aide de SSH et vérifiez les fichiers de vidage sur incident dans
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
:- Le tampon de messages du noyau contient les informations les plus essentielles sur la panne du système et est toujours vidé en premier dans le fichier
vmcore-dmesg.txt
. Cela est utile en cas d'échec d'une tentative d'obtention du fichiervmcore
complet, par exemple en raison d'un manque d'espace sur l'emplacement cible. - Lorsque l'outil
kexec
s'initialise dans le second noyau et capture le contenu de la mémoire du noyau en panne, il écrit également dans le fichierkexec-dmes.log
afin que vous puissiez suivre le processus. Par exemple, à la fin du fichier, vous pouvez voir le processus d'enregistrement du vidage sur incident :... 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//
- Le fichier
vmcore
contient les informations de vidage sur incident. Pour analyser le vidage sur incident, vous avez besoin d'un utilitaire capable de lire le format de fichiervmcore
. Pour plus d'informations sur l'utilisation de l'utilitairecrash
, reportez-vous à Analyse des vidages sur incident.
- Le tampon de messages du noyau contient les informations les plus essentielles sur la panne du système et est toujours vidé en premier dans le fichier
Analyse des vidages sur incident
Vous pouvez utiliser l'utilitaire crash
pour analyser les vidages sur incident collectés par Kdump. Dans les images de plate-forme Oracle Linux, crash
est installé par défaut. Pour les autres instances Linux, utilisez la ligne de commande pour l'installer : sudo dnf install crash
.
Configuration d'une instance Oracle Linux pour utiliser l'utilitaire de panne
Pour analyser un vidage sur incident avec crash
, effectuez les tâches de configuration suivantes :
- A partir d'une ligne de commande, utilisez vos privilèges d'administration et connectez-vous à l'instance à l'aide de SSH.
- Activez le référentiel
debuginfo
Oracle Linux en créant le fichier/etc/yum.repos.d/debuginfo.repo
avec des privilèges root et le contenu suivant, par exemple :[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
- Mettez à jour le système :
sudo dnf update -y
- Installez le package
kernel-uek-debuginfo
:sudo dnf install -y kernel-uek-debuginfo-$(uname -r)
Important
Exécutez la commande d'installation chaque fois que le noyau est mis à jour via le gestionnaire de packages. Le packagedebuginfo
est uniquement fonctionnel lorsqu'il correspond au noyau en cours d'exécution et n'est pas remplacé automatiquement lorsqu'une version plus récente du noyau est installée sur le système.
Analyse d'un vidage sur incident à l'aide de l'utilitaire crash
Pour analyser un vidage sur incident, fournissez les informations vmcore
à crash
, puis utilisez les options de shell crash
pour extraire les informations de vidage sur incident. Pour plus d'informations sur l'utilisation de l'utilitaire crash, saisissez man crash
à l'invite de commande ou reportez-vous à la documentation sur les pannes.
- A partir d'une ligne de commande, utilisez vos privilèges d'administration et connectez-vous à l'instance à l'aide de SSH.
- Fournissez l'emplacement du module
debuginfo
du noyau et l'emplacement du dump noyau en tant que paramètres à l'utilitaire crash, par exemple :sudo crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>/vmcore
$(uname -r) identifie la version du noyau en cours d'exécution dans la commande,
<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>
représente le répertoire qui est créé pour les fichiers de vidage sur incident et le fichiervmcore
contient le vidage sur incident.Le shell
crash
démarre et affiche des informations sur la panne du système, telles que :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>
- A l'invite
crash
, entrez une option pour obtenir plus d'informations sur le vidage sur incident, par exemple :bt -a
affiche une trace de pile des tâches actives lors de la panique du noyau, par exemple :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
affiche uniquement la tâche active sur chaque CPU, par exemple :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
affiche les informations de base sur la mémoire virtuelle du contexte en cours, par exemple :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
affiche des informations sur les fichiers ouverts dans le contexte en cours.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
affiche des informations sur l'utilisation de la mémoire du noyau, par exemple :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
- Lorsque vous avez terminé l'analyse du dump noyau, quittez le shell en saisissant exit ou q.