Liens
softpanorama.org/Lang/debugging.shtml
Optimiser les performances
Infos système
- mes infos
- monitoring-fr *** : supervision et gestion d'infrastructures informatiques
- outils de monitoring et de supervision : Nagios, Centreon (interface web à Nagios), OpenNMS, Cacti, etc.
- infrastructure, sécurité
- Tutos
- Articles
Debug - récolte infos - audit
Diagnostic à distance
Mémoriser les commandes et leurs résultats dans un fichier
- # script cmd-res.txt
- Taper les commandes...
- # exit
Fichiers de config
Générer un rapport sur la machine (matériel, logiciels (infos & configuration))
- hardinfo : GUI, affiche des infos de /proc concernant le matériel (CPU, mémoire, périphs, etc.), également outil de benchmark
- cfg2html : nouvelle version sur github
(GPL3)***
- snapshot
- sosreport (a succédé à sysreport)
- Red Hat, Fedora, Debian, Ubuntu
- Après la récolte des infos, consulter dans le dossier sos_reports les fichiers diagnose.txt et sosreport.html (ses sections "Commands Executed"
listent les commandes utilisées)
- Note : la récolte de la liste des paquets rpm installés peut prendre + de 10 min...
- SysInfo2Html, SysInfo
(doc, projet),
supportconfig (autre
URL) - du package supportutils
- Générer un rapport sur les performances de la machine
- boot : infos
- perfkit (article
&
vidéo
de démo)
- permet de voir les perfs (cpu, mémoire, etc.) de l'ordinateur, ou/et de processus par des plugins pour ftrace
(appels systèmes), Valgrind (profilage mémoire), etc.
- collectl + collectl-utils
*****
- collectl - utilisable en ligne de commande (dans un terminal).
- collectl est peu gourmand en ressources et offre de nombreuses fonctionnalités (récolte d'infos très riche et diversifiée).
- ex : $ collectl -oD
- affichage similaire à top : $ collectl --top
- affichage des + gros consommateurs de CPU : $ collectl -p /var/log/collectl/fichier -top
- affichage de graphiques
- option -P pour générer des fichiers "plottables" facilement par Gnuplot
- par graphite en temps réel, ou par colplot
- articles : monitoring, monitoring
- docs sur le disque dur (une fois le logiciel installé) : exemples, man, /usr/share/doc/collectl
:: doc, tutorial,
FAQ, service,
modes , fichiers de sortie, format
des
données, tracer avec gnuplot (Plot
files, Playback), exemples
(brief, verbose,
detail), CPUs,
Interrupts, processus,
buddyInfo, mémoire (slab),
ipmi,
collecter par seuil (SVC, IOS), réseau
(sockets), NFS, voir
évolution, exporter les résultats, importer,
playback (rejouer), noms
des fichiers, commandes
équivalentes (avec fichiers utilisés), HiRes,
monitoring de Infiniband,
logs collectl, erreurs,
incidence
- collectl-utils
- colplot : permet d'afficher des graphiques dans une
page Web (GNU/Linux & Windows).
- genplotfiles : permet de générer des graphiques à partir de données brut de collectl (GNU/Linux & Windows).
- colgui : affiche des graphiques en temps réel (GNU/Linux).
- colmux : pour utiliser collectl avec des machines
multiples (GNU/Linux).
- Installation et configuration de colplot (à partir des sources) pour utilisation avec Apache, sur Ubuntu 10.04
- ajouter en ligne 47 du fichier INSTALL :
- # Ubuntu 10.04
if [ -f /etc/lsb-release ]; then
www=/var/www
ctl=/usr/sbin/apache2ctl
confd=/etc/apache2/conf.d
fi
- exécuter INSTALL
- dans /etc/apache2/conf.d/colplot-apache.conf modifier la directive "Directory" comme suit :
- <Directory "/var/www/colplot">
- redémarrer Apache (apache2ctl restart)
- Cacti (article)
- affiche les résultats de RRDTool
- HP Caliper
- pour serveurs HP de type "Integrity"
- version pour HP-UX (gratuite), version pour GNU/Linux (gratuite pour utilisation non-commerciale)
- interfaces de monitoring
- sysbench
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
- Outil de Gnome : gnome-system-monitor
- atop - affichage dans la fenêtre terminal (freecode)
- Permet également de voir les activités système dans le passé, exemple : # atop -r 20120520 -b 16:30
- atopsar permet d'afficher en clair le contenu de
fichiers générés par atop.
- htop
- glances *** - stats système (cpu, mémoire,
réseau, I/O) dans un terminal graphique ou dans une console à distance
- perfkit
- conky (exemples
avec leurs fichiers de config, doc Ubuntu fr)
- Tester un fichier de config conky : $ conky -c /le/path/conky.cfg
- KrellM
- nmon - utilise curses dans un terminal pour afficher cpu, mémoire,
I/O, etc.
- saidar - utilise curses dans un terminal pour afficher cpu,
mémoire, I/O, etc.
- xosview | sur sourceforge
- affiche en différentes couleurs : cpu, mémoire (process, cache disque, swap), etc (GNU/Linux)
- Xinfo
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
- Architecture (au niveau microprocesseur)
- 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
- 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.
- 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
- # 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
- Tracage au niveau routines/libs
- 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
- syslog-ng : plus récent et permet une meilleure granularité
- rsyslog (blog)
- 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.)
- 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
- 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
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é)
|