Collecte des vidages accidentels à l'aide de l'utilitaire Kdump
Lorsqu'un système Oracle Linux éprouve une panique du noyau et tombe en panne de manière inattendue ou cesse de répondre, les 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 dumping pour les informations sur les pannes du noyau. Dans les images de plate-forme Oracle Linux, le système d'exploitation est entièrement configuré ou partiellement configuré pour générer un dump sur incident, selon la date de lancement de l'image.
Pour les images Linux personnalisées et de marché des applications déployées, installez et configurez Kdump à l'aide de la ligne de commande.
Kdump comprend un deuxième noyau, qui réside dans une partie réservée de la mémoire système, de sorte qu'il peut capturer des informations sur un noyau arrêté. Kdump utilise l'appel système kexec pour démarrer dans le deuxième noyau, appelé noyau de saisie, sans avoir à redémarrer 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, voir À l'intérieur d'un vidage de noyau Linux.
/var/oled/crash/<ip-address>-<YYYY-MM-DD>-<HH:MM:SS>. Un nouveau 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:19Le 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 vous avez une instance Oracle Linux qui est inaccessible ou qui ne répond pas, vous pouvez envoyer une interruption de diagnostic pour le dépannage. Une interruption de diagnostic provoque une panne et le redémarrage du système d'exploitation de l'instance. Pour utiliser la console ou l'API pour envoyer une interruption de diagnostic, Kdump doit être configuré pour générer un vidage sur incident. Pour plus d'informations, voir Envoi d'une interruption de diagnostic.
Définition de la mémoire réservée pour un vidage sur incident
Sur les images de plate-forme Oracle Linux, Kdump est installé et entièrement configuré ou partiellement configuré par défaut. Vous pouvez modifier la quantité de mémoire réservée dans le noyau pour enregistrer le vidage sur incident, également appelé réservation de mémoire du noyau de mémoire sur incident. Dans Oracle Linux 8 et versions antérieures, la réservation de mémoire par défaut est réglée pour s'ajuster automatiquement : GRUB_CMDLINE_LINUX="crashkernel=auto". Toutefois, crashkernel=auto n'est pas pris en charge sur Oracle Linux 9 ou une version plus récente. 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 :
- À 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/grubpour définir la mémoire réservée. Par exemple :- Réglez la réserve de mémoire à 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. Comme la réservation
crashkernela lieu au début du processus de démarrage, certains systèmes exigent 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"
- Réglez la réserve de mémoire à 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 après incident
À 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 au moyen de SSH ou les exporter vers un partage de réseau.
- À 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.confet supprimez 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, voir le fichier
kdump.conf.5dans 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 redémarre le serveur. Cette action supprime toutes les données qui ont été collectées pour le vidage. Pour empêcher ce résultat, modifiez la configuration Kdump.
- À partir d'une ligne de commande, à l'aide des privilèges d'administration, connectez-vous à l'instance à l'aide de SSH.
- Modifiez
/etc/kdump.confpour annuler la mise en commentaire et modifiez la valeurdefaultdans le fichier comme suit :default dump_to_rootfsL'option
dump_to_rootfstente 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.Note
Les options
poweroff,restartethaltsont également valides pour l'état d'écheckdumppar défaut. Toutefois, si vous effectuez ces actions, vous perdrez les données collectées. Pour plus d'informations, voir le fichierkdump.conf.5dans 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 accidentel
Testez la configuration Kdump en bloquant le noyau qui déclenche la collecte d'un vidage sur incident par le service. Ensuite, vérifiez le vidage sur incident.
- À partir d'une ligne de commande, à l'aide des privilèges d'administration, connectez-vous à l'instance à l'aide de SSH.
- Vérifiez que Kdump est en cours d'exécution :
systemctl is-active kdump - Démarrez la panne à partir de la console ou de la ligne de commande :Cela force le noyau à se bloquer et les fichiers de vidage 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>:- La mémoire tampon des messages du noyau inclut les informations les plus essentielles sur la panne du système et elle est toujours vidée d'abord dans le fichier
vmcore-dmesg.txt. Cette fonction est utile en cas d'échec d'une tentative d'obtention du fichiervmcorecomplet, par exemple en raison d'un manque d'espace dans l'emplacement cible. - Lorsque l'outil
kexecdémarre dans le deuxième noyau et capture le contenu de la mémoire du noyau écrasé, il écrit également dans le fichierkexec-dmes.logafin 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
vmcorecontient 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. Voir Analyse des vidages d'incident pour plus d'informations sur l'utilisation de l'utilitairecrash.
- La mémoire tampon des messages du noyau inclut les informations les plus essentielles sur la panne du système et elle est toujours vidée d'abord dans le fichier
Analyse des vidages accidentels
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.
Configurer une instance Oracle Linux pour utiliser l'utilitaire d'incident
Pour analyser un vidage sur incident avec crash, effectuez les tâches de configuration suivantes :
- À 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 Oracle Linux
debuginfoen créant le fichier/etc/yum.repos.d/debuginfo.repoavec les privilèges racine 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=1Remplacez
ol8parol9si vous utilisez Oracle Linux 9 ouol10si vous utilisez Oracle Linux 10. - Mettre à jour le système :
sudo dnf update -y - Installez l'ensemble
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 au moyen du gestionnaire d'ensembles. L'ensembledebuginfon'est fonctionnel que 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.
Analyser un vidage d'incident à l'aide de l'utilitaire d'incident
Pour analyser un vidage sur incident, fournissez les informations vmcore à crash, puis utilisez les options de l'interpréteur de commandes crash pour extraire les informations sur le vidage sur incident. Pour des informations détaillées sur l'utilisation de l'utilitaire Corbeille, entrez man crash à une invite de commande ou consultez la documentation sur la corbeille.
- À partir d'une ligne de commande, utilisez vos privilèges d'administration et connectez-vous à l'instance à l'aide de SSH.
- Indiquez l'emplacement du module
debuginfodu noyau et l'emplacement du vidage du noyau en tant que paramètres de l'utilitaire Corbeille, 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 fichiervmcorecontient le vidage sur incident.L'interpréteur de commandes
crashdémarre et affiche des informations sur les pannes 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> - À l'invite
crash, entrez une option pour obtenir plus d'informations sur le vidage sur incident, par exemple :bt -aaffiche une trace de pile des tâches actives lorsque le noyau a paniqué, 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: 00000246ps -Aaffiche uniquement la tâche active sur chaque UC, 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 oraclevmaffiche les informations de base sur la mémoire virtuelle du contexte courant, 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 ...filesaffiche des informations sur les fichiers ouverts dans le contexte courant.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 PIPEkmem -iaffiche 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 vidage du coeur, quittez l'interpréteur de commandes en entrant exit (quitter) ou q.