GNU/Linux : Debug - récolte d'infos - audit - performances


Liens

softpanorama.org/Lang/debugging.shtml

Optimiser les performances

Infos système

Debug - récolte infos - audit

Diagnostic à distance

  • par ssh ou VNC

Mémoriser les commandes et leurs résultats dans un fichier

  1. # script cmd-res.txt
  2. Taper les commandes...
  3. # exit

Fichiers de config

Générer un rapport sur la machine (matériel, logiciels (infos & configuration))

Récolte d'infos au niveau système

  • perf top, perf stat (perf timechart => graphique)
  • Les systèmes de fichier virtuels procfs et sysfs
    • procfs est monté sur /proc et permet
    • sysfs est monté sur /sys et permet de récolter des infos sur les périphériques et leur pilote (driver) par /sys/module, et de les configurer
  • version du s.e.
    • lsb_release -a
    • # cat /etc/issue ; cat /etc/*release*
    • $ cat /etc/debian_version   Debian (Ubuntu, etc.)
  • paramètres du s.e.
  • config du noyau Linux, etc.
  • Taille de la page mémoire (pagesize)
    • # getconf PAGE_SIZE   (4096 octets pour les microprocesseurs de la famille x86)
  • Heure/date
    • $ date ; hwclock -r
    • /etc/sysconfig/clock (RHEL, SLES)
  • Fichiers de log
  • Login : $HOME/.bash_profile, $HOME/.bashrc, /etc/bashrc

Surveiller un ordinateur (monitor, monitoring) - commandes générales & outils

Docs

RHEL 6 Performance Tuning Guide

Commandes

  • perf top, perf stat (perf timechart => graphique)
  • ps
  • sar : affiche un nombre important d'infos (multi-cpu, mémoire, interrupts, io, etc.)
  • top
    • Aide - dans top, taper : h. Voir également : # man top et : # info top
    • Ne pas voir les processus inactifs : i
    • Vue SMP (multi-processeur, multi-coeurs) : 1
    • Voir les threads, taper : H
    • Voir la charge CPU : c
    • Voir la charge mémoire : m
    • Choisir les champs affichés : f
      • ex : pour voir sur quel CPU s'exécute une tâche, taper : f, et choisir : j
    • man top, How to Use the Top Command in Linux, autre article
    • Autres astuces top sur GNU/Linux
    • Outil équivalent : collectl (avec l'option --top)
    • Outil plus pratique/lisible : htop
    • HP-UX : top -f resultat.txt   (infos charge CPU)

Outils

  • Monitorer un processus
  • sysdig : activité et état système (strace + tcpdump + lsof, etc.) - exemples
  • collectl ***
  • collectd ***
  • dstat ***
    • progamme python polyvalent, qui lit les infos dans les fichiers de /proc ($ dstat --debug)
    • permet de récolter simultanément une multitude d'infos (multi-cpu, mémoire, interrupts, io, réseau, etc.), ce qui remplace ifstat, iostat, netstat, nfsstat, vmstat, ...
    • $dstat --list : affiche les nombreux plugins (databases, nfs, etc.)
    • infos affichées dans le  terminal, ou stockées au format CSV dans un fichier pour créer des graphiques par Gnumeric, OpenOffice, ou Excel (dstat -Tafv --noheaders --output resultats.csv)
    • exemples (voir aussi documentation et man dstat)
      • $ dstat -tcmsd   (time, cpu, mémoire, swap, disques)
      • $ dstat -tci   (time, cpu, interrupts)
        • à utiliser en // avec : $ cat  /proc/interrupts
      • $ dstat -tcdgmvsy   (time, cpu, disque, page, mem, vmstat, swap, syst)
      • $ dstat -tcdsnil -D hda -N eth0   (time, cpu, disque, swap, network, interrupt, load)
      • Autres exemples : dstat -a, dstat -afv, dstat -c --top-cpu -d --top-bio --top-latency
  • netperf : perf. réseau
  • oprofile - utilise les compteurs intégrés aux microprocesseurs.
  • pfmon (outil de perfmon pour microprocesseurs Itanium et i7)
  • SystemTap : scripts exécutés par la commande stap.
    • Récolte infos, tracing (pbs fonctionnels et de perf, de l'o.s., du noyau).
    • Permet de récolter des infos système et noyau (équivalentes à celles de top, ps, iostat, netstat, etc.)
    • Peut être utilisé pour étudier/optimiser les perf. du système ou d'une application.
    • infos, exemples (autres), infos Wikipedia | linuxfr, guide Fedora

Affichage à l'écran des capteurs de la carte mère

Affichage à l'écran des perf. système

Superviser/monitorer une machine à distance

En local : ashttp -p 8080 top

Et à distance : http://adresse_de_la_machine:8080  (F5 pour rafraîchir)

Superviser/monitorer plusieurs machines à distance

Commandes, par catégorie

Note : les commandes suivantes se retrouvent pour la plupart dans des outils de type shell-script générant un rapport (cfg2html, etc.).

Système d'exploitation -  infos, configuration, limites

  • En bref
    • # collectl --showheader
  • Architecture (au  niveau microprocesseur)
    • # arch
  • Version du noyau Linux
    • # uname -a
    • si x86-64 => noyau 64 bits sur plate-forme 64 bits (x86_64)
  • Paramètres du s.e.
    • Nom de la distribution et sa version
      • # lsb_release -a
    • limites au niveau du s.e.
      • communication inter-processus
      • les valeurs des fichiers sous /proc permettent de récolter des infos, ou de configurer le s.e.
        • politique au niveau microprocesseur ($ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
        • file system   (ex : /proc/sys/fs/file-max)
    • limites au niveau du noyau Linux (configuration : sysctl.conf, etc.)
    • préférences X par utilisateur
    • limites par utilisateur
      • voir les limitations : # ulimit -a
      • modifier les limitations, par utilisateur, par groupe, ou pour tous.
        • fichier de configuration : /etc/security/limits.conf  (utilisé entre-autres par PAM)
        • ex : si le nombre de fichiers ouverts est insuffisant pour tous, ajouter dans /etc/security/limits.conf :
          • *   soft    nofile  8192
          • *   hard   nofile   10000   (ne doit pas être supérieur à la valeur de /proc/sys/fs/file-max)
      • modifier les limitations au niveau utilisateur
        • ex : $ ulimit -n unlimited      (=> définit le nofile à la valeur "hard")
  • Point de montage
    • # cat /etc/fstab
    • # cat /proc/mounts
    • # findmnt
  • Infos sur un système de fichiers (file system) : UUID, Inode size, etc.
    • # tune2fs -l /dev/sda3
  • fichiers de log
  • lsof (autre URL) - à exécuter en tant que root, ou par sudo
    • Docs : FAQ, man, /usr/share/doc/lsof
    • Scripts : /usr/share/doc/lsof/examples
      • $ cd /tmp ; cp /usr/share/doc/lsof/examples/*.awk . && gunzip *.awk.gz
      • $ lsof -F | awk -f list_fields.awk | more
      • $ awk -f xusers.awk | more
    • # lsof -v (affiche la version, l'URL du FAQ lsof, et des infos)
    • # lsof -p le_pid
    • # lsof -i (affiche les infos au niveau réseau)... lsof -i4, lsof -i :389, etc.
    • # lsof -iTCP -sTCP:LISTEN (affiche les démons et ports en attente de connexion)
    • # lsof -iTCP:389 (affiche des infos sur le port 389, utilisé par défaut par le démon LDAP slapd)
  • # cat /proc/cpuinfo
  • # ruptime -a   (état des machines locales)
  • Infos audio
    • PulseAudio :: doc utilisateur
      • # pactl info   (Autres options : stat, list. Autre commande : pacmd)
    • # lspci | grep -i audio  (lspci -vvnn donne des infos plus détaillées)
    • infos sur la carte son et sa config, le pilote audio, les devices (synth, midi), le mixeur
      • # cat /dev/sndstat
      • # cat /proc/asound/oss/sndstat
    • # /bin/fuser -v /dev/dsp  (infos sur les progs utilisant le son)
    • # gstreamer-properties  (affiche des infos, et affiche un GUI "sélecteur de systèmes multimédia" : choix entre ALSA et OSS, etc.)
  • Info shell
    • # type une_commande (indique le path de la commande qui sera exécutée)
    • # type -a une_commande (indique les commandes dont le path est dans $PATH)
  • Qui utilise un fichier ou un socket
    • # fuser -v /usr/sbin/apache2
  • suivi dynamique des connexions réseau
    • $ watch -n2 -d netstat -an
  • X (infos concernant le serveur X Window)
    • # xdpyinfo
    • # xinput list
    • # xset -q

Démons (appelés également services dans certaines distrib GNU/Linux)

  • # /sbin/service --status-all
  • # /sbin/service --list
  • # chkconfig --list
  • # /etc/init.d/nom_du_service status
  • # lsof | grep nom_du_service
  • Note : ajouter un service : update-rc.d (Debian)

Processus

  • Moniteur système → sélectionner un processus → Affichage → Cartes de la mémoire (VM, etc.) ou Fichiers ouverts
  • Libs utilisées
    • # ldd --version (permet de savoir la version de GLIBC du s.e.)
    • # ldd nom_du_prog
      • # ldd $(which Xrealvnc)
    • # ldconfig
    • # ldconfig -v | grep libstdc++
  • Debian et dérivés : #rcconf
  • Red Hat, dérivés etc : # drakconfhh
  • Activité des processus : # top
  • Infos
    • $ type nom_du_prog ; which ls ; whereis nom_du_prog
    • $ file /le_path/nom_du_prog
    • $ strings /le_path/nom_du_prog   (utile également pour extraire le texte de fichiers contenant des caractères de contrôle)
  • Infos et stats au niveau processus
  • Fichiers ouverts à l'instant t
    • # lsof -c nom_du_prog
  • Tracage au niveau routines/libs
    • # gprof
  • Infos et stats système (CPUs, état des progs, etc.)
  • Infos sur un process : # cat /proc/son_pid/status
  • Stats au niveau microprocesseur : # mpstat  - fait partie du paquetage sysstat
  • Outils de débogage
  • Surveillance de processus (monitoring)
    • # ksysguard   (paquet 'kdebase-progs')
    • # gnome-system-monitor
    • # ps-watcher   (permet de voir si un processus est toujours là, s'il consomme trop de ressources, etc.)
    • # pidof  httpd   (affiche les pid des processus httpd)
  • Générer un core d'un processus en fonctionnement
  • Infos mémoire

Infos matérielles (hardware), et autres infos

hardinfo : GUI, affiche des infos de /proc concernant le matériel (CPU, mémoire, périphs, etc.), également outil de benchmark

inxi (man, options) : très riche en fonctionnalités, affiche moultes infos

  • inxi -F -c7 (-F affiche les infos système, c1 à c32 sont des schémas de couleurs d'affichage des résultats)
  • inxi -t cm 6 (affiche les processus les plus gourmands en CPU et en mémoire)

Autres outils

Commandes
Info
# echo $MACHTYPE
Infos (32, 64 bits, etc.)
# biosdecode
# check-bios-nx --verbose  (virtualisation)
# kvm-ok  (virtualisation)
Autres infos de type BIOS, UEFI, firmware
Infos BIOS
Bit NX opérationnel au niveau CPU et BIOS ?
VT activé dans le BIOS ?
# dmidecode
# dmidecode -s system-product-name
# dmidecode -t memory
Interroge le DMI du BIOS.
Product-name = réf. machine, carte mère, ou machine virtuelle.
Enlever quiet de la config de démarrage grub
# dmesg
/var/log : fichiers dmesg, boot.log, messages
/proc/kmsg
# mcelog
Affichera ce qui se passe au boot.
Affiche ce qui s'est passé au boot.
Fichiers de log.
Fichiers "proc".
mcelog affiche les erreurs hardware.
# hwinfo
Infos hardware.
# lshw  ou : # lshw -short
# lshw -C disk  (disques & lecteur/graveur CD/DVD)
# lshw -html > infos_materiel.htm
# lshw-gui  ou : gtk-lshw  (interface GUI GTK+)
Hardware Lister, très complet.
Exécuter lshw en root.

Installer les packages lshw et lshw-gui.
# cat /proc/cpuinfo
# lscpu
lnfos CPU
lscpu fait partie du package util-linux
# lspci
# lspci -s 00:1f.5 -vv   (infos sur ce périph)
# lspci  -v ; lspci -vt   (vue arborescente/tree)
# lspci -vvnn   (infos plus détaillées)
# lspci -t -vv   (tree - vue arborescente détaillée)
Liste les infos des cartes PCI.
Les "id" (identifiants PCI) sont listés ici.
Mettre à jour la liste des identifiants PCI : update-pciids
Autres infos : /sys/bus/pci, /sys/devices
# cat /etc/sysconfig/hwconf Périph et drivers associés (sur certaines versions de RHEL).
# cat /proc/driver/cciss/cciss0
Périph smart array et driver cciss associé.
# lsscsi -g
# lsscsi -L ; lsscsi -l  (détails)
# cat /proc/scsi/scsi
# cat /proc/scsi/sg/device_strs
# cat /proc/sys/dev/cdrom/info
# sginfo -l  (du paquet sg3-utils - Debian, etc.)
# sg_map  (correspondance entre sg et périphs)
# scsiinfo -a /dev/sg0  (du package scsitools - Debian, etc.)
Périph. SCSI connectés (disque dur, CD, DAT, etc.)
Exemples d'utilisation de lsscsi
Le driver sg (/dev/sg...) offre un autre type d'accès).

# man  8 sg3_utils
Voir aussi sg3-utils, device_name.
# systool
# systool -c scsi_host -v
systool fait partie du package sysfsutils
Exemples, Ex. HBA : vérif version drivers, firmwares
Mes autres infos drivers, sous forme de module, ou intégrés au noyau (version, info)
# lsusb Liste les infos des périphériques USB
# cdrecord -scanbus
# cdrecord -atip
Infos sur les lecteurs/graveurs CD/DVD.
udev
udev, udevadm

disque dur
Infos sur les disques durs (hdparm, scsiinfo, etc.)
Tests par dd
Infos
Tests lecture/écriture

Logs (journaux)

  • Fichiers de log
    • sont indiqués dans /etc/syslog.conf
    • se trouvent en général dans /var/log
    • logs système : /var/log/dmesg, /var/log/messages
  • Tutoriels
  • syslog, etc.
    • syslog
      • tutoriel syslog
      • (re-)démarrage/arrêt du démon syslog : /etc/init.d/syslog
    • syslog-ng : plus récent et permet une meilleure granularité
    • rsyslog (blog)
      • un démon syslog amélioré
  • klogd
    • Pour éviter, par exemple, un remplissage de la console par des messages de shorewall de niveau info
      • positionner dans /etc/init.d/klogd : KLOGD="-c 5"
  • Console
    • /etc/sysctl.d/10-console-messages.conf
      • Pour éviter d'y afficher des messages de bas niveau :
      • kernel.printk = 4 4 1 7
  • Outils
    • Commandes
      • # tail
        • affiche la fin d'un fichier (affichage dynamique avec l'option -f)
      • # syslog-summary
        • compte et affiche sur une seule ligne les lignes redondantes (en éliminant les dates)
      • logtop
        • En cas d'attaque DoS (IP flooding), permet de voir en temps réel quelles adresses IP sollicitent le plus un serveur Apache : tail -f /var/log/apache2/access.log | cut -d' ' -f1 | logtop   (autre solution : watch "tail /var/log/apache2/access.log | cut -d' '  -f1| sort | uniq -c | sort -gr")
    • Analyse à distance des logs
    • Analyse manuelle des logs
      • Coloriser les logs : par un éditeur (Vim, etc.), par Colorifer, etc.
      • logcheck (article) - trie par expressions régulières
      • Ksystemlog (KDE) : permet de visualiser simultanément (dans des tab) plusieurs fichiers de logs d'une machine, couleurs, filtrage, etc.
      • Multitail (Infos) : permet de visualiser simultanément plusieurs fichiers de logs de plusieurs machines, couleurs, filtrage par expressions régulières, stats, etc
      • Inotail : à l'écoute des événements envoyés par les noyaux récents au travers de l'API inotify
        • nécessite un noyau 2.6.13 ou +, avec CONFIG_INOTIFY activé
    • Affichage en 2D, etc.
    • Analyse, outils gratuits
    • Analyse automatique
      • logstash (collecte, analyse, etc.) - logs d'une ou de multiples machines, utile par exemple pour OpenStack
      • LogReport (infos Ubuntu): synthèse des logs.
      • Picviz (infos Ubuntu) : synthèse graphique des logs.
      • pom et openpom : synthèse graphique des logs, plate-forme ouverte de monitoring qui s'appuie sur Nagios
      • Webalizer : synthèse graphique de logs "serveur Web".
    • Outils logs langages, services
    • Annuaire Google - Log Analysis

Crash & debug (system panic)

Infos

Debug de crash "système"

Debug de crash de processus

Debug hors s.e.

SMM (System Management Mode)

Debug de processus actif

Liens web

  • cours (pdf) *** - couvre les concepts et outils (strace, valgrind, gdb, ddd, etc.)

Codes d'erreur

  • Les codes d'erreur (11 <=> EAGAIN, etc.) sont listés dans /usr/include/asm/errno.h

catchsegv

A utiliser quand un programme plante en segmentation fault. Autre solution : gdb.

dtrace

commande associée à DTrace, qui est inclus dans FreeBSD, Max OS X, et Solaris (Solaris dynamic tracing guide), un portage Linux de DTrace serait en cours.

ftrace

infos

ltrace

Infos au niveau des fonctions des libs dynamiques

strace

Infos au niveau du processus et des fonctions appelées

  • Note : futex indique un "locking mechanism"
  • Bref tutoriel | tutorial
  • Exemples
    • # strace  un_prog
    • # strace -c un_prog   (affiche également des stats)
    • # strace -e open un_prog   (permet de voir les open de fichiers de config, de libs, etc.)
    • # strace -p pid_d_un_prog_qui_bloque   (Ctrl-C pour arrêter et voir où il bloquait)
    • # strace -fcp un_pid   (Ctrl-C pour arrêter la trace => stats)
    • strace -s 300 -f -ff -o resultat un_prog

valgrind (profilage mémoire)

  • Site web
  • Tutorial, doc RHEL 6
  • 6 production-quality tools: a memory error detector, two thread error detectors, a cache and branch-prediction profiler, a call-graph generating cache and branch-prediction profiler, and a heap profiler.
  • Three experimental tools: a heap/stack/global array overrun detector, a second heap profiler that examines how heap blocks are used, and a SimPoint basic block vector generator.
  • Gratuit - licence GPL 2
  • S'exécute sous GNU/Linux

Récolte d'infos au niveau d'un fichier exécutable (binaire)

  • Commandes
    • # file le_binaire   (indique son format : ELF, etc.)
    • # strings le_binaire
  • Voir les librairies utilisées
    • # ldd le_binaire
  • Infos sur les binaires au format ELF (le_binaire.elf, .exe, .o, .so, ou sans extension)
    • # readelf -a le_binaire
    • # readelf -l le_binaire
    • # elfdump -t le_binaire   (autres options : -dc, etc.)
    • # /lib64/ld-linux-x86-64.so.2 --list le_binaire
  • Si le binaire est non-strippé
    • # nm le_binaire
    • # nm -D le_binaire
  • S'il est strippé, ou pour les libs partagées
    • # objdump -T le_binaire

Debug de shell-script

  Plus de détails et d'options par : man sh
  • set -v   (affiche les lignes de commandes)
  • set -x   (affiche les lignes de commande après interprétation et avant exécution, les lignes sont précédées du signe +)
    • set +x (arrêt de ce mode debug)
  • set -n   (les lignes de commandes sont lues, mais pas exécutées)
  • set -u   (si une variable n'est pas définie, un message d'erreur sera affiché)

Vic
Page modifiée le 27 janvier 2023
Page d'accueil du site