GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser kdump pour l'analyse de plantage du noyau Linux

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)

Linux
  1. Comment utiliser BusyBox sous Linux

  2. Comment utiliser rsync avancé pour les sauvegardes Linux volumineuses

  3. Comment utiliser systemd-nspawn pour la récupération du système Linux

  4. Comment utiliser FIND sous Linux

  5. Comment utiliser la commande Su sous Linux

Comment utiliser la commande Linux nohup

Comment utiliser traceroute sur Kali Linux

Comment utiliser l'écran Linux

Comment vérifier les ports d'écoute sous Linux (ports utilisés)

Différents types de noyau pour Arch Linux et comment les utiliser

Comment installer Zenoss Core pour la surveillance sur Linux CentOS / RHEL