Kdump est un utilitaire utilisé pour capturer le vidage principal du système en cas de panne du système.
Ces vidages de mémoire capturés peuvent être utilisés ultérieurement pour analyser la cause exacte de la défaillance du système et mettre en œuvre le correctif nécessaire pour éviter les plantages à l'avenir.
Kdump réserve une petite partie de la mémoire pour le noyau secondaire appelé crashkernel.
Ce noyau secondaire ou crash est utilisé pour capturer l'image de vidage de mémoire chaque fois que le système plante.
1. Installer les outils Kdump
Tout d'abord, installez le kdump, qui fait partie du package kexec-tools.
# yum install kexec-tools
2. Définir crashkernel dans grub.conf
Une fois le paquet installé, éditez le fichier /boot/grub/grub.conf et définissez la quantité de mémoire à réserver pour le noyau de crash kdump.
Vous pouvez modifier le fichier /boot/grub/grub.conf pour la valeur crashkernel et le définir sur une valeur automatique ou spécifiée par l'utilisateur. Il est recommandé d'utiliser un minimum de 128 Mo pour une machine avec une mémoire de 2 Go ou plus.
Dans l'exemple suivant, recherchez la ligne commençant par "kernel", où elle est définie sur "crashkernel=auto".
# 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. Configurer l'emplacement de vidage
Une fois le noyau planté, le vidage de mémoire peut être capturé sur le système de fichiers local ou le système de fichiers distant (NFS) en fonction des paramètres définis dans /etc/kdump.conf (dans le système d'exploitation SLES, le chemin est /etc/sysconfig/kdump).
Ce fichier est automatiquement créé lors de l'installation du package kexec-tools.
Toutes les entrées de ce fichier seront commentées par défaut. Vous pouvez décommenter ceux qui sont nécessaires pour vos meilleures options.
# 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
Dans le fichier ci-dessus :
- Pour écrire le vidage sur un périphérique brut, vous pouvez décommenter "raw /dev/sda5" et le modifier pour qu'il pointe vers l'emplacement de vidage correct.
- Si vous souhaitez modifier le chemin de l'emplacement de vidage, décommentez et modifiez "path /var/crash" pour pointer vers le nouvel emplacement.
- Pour NFS, vous pouvez décommenter "#net my.server.com:/export/tmp" et pointer vers l'emplacement actuel du serveur NFS.
4. Configurer le collecteur principal
L'étape suivante consiste à configurer le collecteur principal dans le fichier de configuration Kdump. Il est important de compresser les données capturées et de filtrer toutes les informations inutiles du fichier principal capturé.
Pour activer le collecteur principal, décommentez la ligne suivante qui commence par core_collector.
core_collector makedumpfile -c --message-level 1 -d 31
- makedumpfile spécifié dans le core_collector crée en fait un petit DUMPFILE en compressant les données.
- makedumpfile fournit deux formats DUMPFILE (le format ELF et le format compressé kdump).
- Par défaut, makedumpfile crée un DUMPFILE au format compressé par kdump.
- Le format compressé kdump peut être lu uniquement avec l'utilitaire de blocage, et il peut être plus petit que le format ELF en raison de la prise en charge de la compression.
- Le format ELF est lisible avec GDB et l'utilitaire de blocage.
- -c sert à compresser les données de vidage par page
- -d est le nombre de pages inutiles et pouvant être ignorées.
Si vous décommentez la ligne #default shell, le shell est appelé si le kdump ne parvient pas à collecter le noyau. Ensuite, l'administrateur peut effectuer manuellement le vidage de mémoire à l'aide des commandes makedumpfile.
5. Redémarrez les services kdump
Une fois kdump configuré, redémarrez les services kdump,
# service kdump restart Stopping kdump: [ OK ] Starting kdump: [ OK ] # service kdump status Kdump is operational
Si vous rencontrez des problèmes lors du démarrage des services, le module kdump ou le paramètre crashkernel n'a pas été configuré correctement. Donc, vérifiez /proc/cmdline et assurez-vous qu'il reflète pour inclure la valeur crashkernel.
6. Déclencher manuellement le vidage mémoire
Vous pouvez déclencher manuellement le vidage de mémoire à l'aide des commandes suivantes :
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
Le serveur redémarrera de lui-même et le vidage sur incident sera généré.
7. Afficher les fichiers de base
Une fois le serveur redémarré, vous verrez que le fichier principal est généré sous /var/crash en fonction de l'emplacement défini dans /var/crash.
Vous verrez les fichiers vmcore et 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. Analyse de Kdump avec crash
L'utilitaire Crash est utilisé pour analyser le fichier principal capturé par kdump.
Il peut également être utilisé pour analyser les fichiers de base créés par d'autres utilitaires de vidage tels que netdump, diskdump, xendump.
Vous devez vous assurer que le package "kernel-debuginfo" est présent et qu'il est au même niveau que le noyau.
Lancez l'outil de crash comme indiqué ci-dessous. Après avoir exécuté cette commande, vous obtiendrez une invite de trésorerie, où vous pourrez exécuter des commandes de plantage :
# crash /var/crash/127.0.0.1-2014-03-26-12\:24\:39/vmcore /usr/lib/debug/lib/modules/`uname –r`/vmlinux crash>
9. Afficher le processus en cas de plantage du système
Exécutez la commande ps à l'invite de plantage, qui affichera tout le processus en cours lorsque le système plantera.
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. Afficher l'espace d'échange lorsque le système s'est écrasé
Exécutez la commande d'échange à l'invite de plantage, qui affichera l'utilisation de l'espace d'échange lorsque le système plante.
crash> swap FILENAME TYPE SIZE USED PCT PRIORITY /dm-1 PARTITION 2064376k 0k 0% -1
11. Afficher IPCS lorsque le système plante
Exécutez la commande ipcs à l'invite de plantage, qui affichera l'utilisation de la mémoire partagée lorsque le système s'est planté.
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. Afficher l'IRQ lorsque le système plante
Exécutez la commande irq à l'invite de plantage, qui affichera les statistiques IRQ lorsque le système plantera.
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 – Cette commande traduit une adresse virtuelle d'utilisateur ou de noyau en son adresse physique.
foreach – Cette commande affiche les données de plusieurs tâches dans le système
waitq – Cette commande affiche toutes les tâches mises en file d'attente dans une file d'attente.
13. Afficher la mémoire virtuelle en cas de plantage du système
Exécutez la commande vm à l'invite de plantage, qui affichera l'utilisation de la mémoire virtuelle lorsque le système s'est planté.
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. Afficher les fichiers ouverts lorsque le système s'est écrasé
Exécutez la commande de fichiers à l'invite de plantage, ce qui affichera les fichiers ouverts lorsque le système plantera.
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. Afficher les informations système en cas de plantage du système
Exécutez la commande sys à l'invite de plantage, qui affichera les informations système lorsque le système plantera.
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)