Débusquer les rongeurs de ressources...
Le 20 février 2008, à 13:7 par Ulhume...

Non pas que je sois un malade de vitesse, loin de là, mais il n'y a rien de plus agaçant que d'avoir son système qui répond avec un quart de seconde de retard sans en comprendre la cause. Et comme ce dont on dispose le plus facilement sur n'importe quel système *nix est une console, voici une batterie d'outils en mode texte pour débusquer les rongeurs de ressources.

En mode texte donc, des trucs très "low-tech" sans icônes, ni menus déroulant, ni interfaces web-ajax-2.0-machin-bidule. Ils se lancent en tout simplicité par une commande dans un terminal, en local ou à distance avec SSH. La majorité de ces utilitaires sont disponibles avec toutes les distributions et, lorsque ce n'est pas le cas, est indiqué l'URL où le télécharger. Enfin texte ne voulant pas dire anti-ergonomique, nombre d'entre elles utilisent la librairie ncurse permettant un contrôle au clavier, la colorisation et même l'utilisation de la souris.

Historique (tout afficher)
  • v2 - lien mort (2008-10-01 15:07)

les top's

Les outils de la famille top proposent généralement l'affichage d'un tableau plus ou moins dense, coloré ou interactif composé d'une liste d'items (ip, processus, etc) triés selon le critère que l'on cherche à étudier. La majorité d'entre eux disposent en outre d'un résumé de consommation globale.

Mémoire et CPU

La commande top est aussi répandue sur les systèmes *NIX que vi. Vous pouvez toujours compter sur elle car elle sera toujours installée sur une machine, quelle que soit la distribution utilisée.

Cet outil vous permet d'afficher la liste des processus qui tournent sur une machine, classée par consommation de CPU. Cela permet en un coup d'oeil de voir quels sont les processus fous. La touche ? permet d'avoir accès aux nombreuses options de tri, de choix de colonne, etc. Une commande à maîtriser donc (comme vi Wink.

Mais bien mieux que top, nous avons htop. Il faut bien sur l'installer mais cela vaut le coup car cet outil rajoute aux fonctions de son ancêtre, la couleur et l'interactivité grâce à ncurse. Vous pouvez donc sélectionner les processus, les tuer (touche k) les grouper par thread, etc. En pressant la touche p, l'ensemble des processus sera trié par leur charge machine et avec m ce sera par mémoire consommée.

Pour finir, un petit passage sur un top que j'aime beaucoup mais qui n'est utilisable que sur les kernels récents : powertop. Développé par Intel pour optimiser la vie des batteries des ordinateurs portables, il permet de savoir quels sont les processus qui consomment le plus d'énergie en se basant sur divers paramètres dont la tendance qu'ils ont à réveiller le kernel. Et cerise sur le gâteau, ce top là a l'intelligence de vous fournir des conseils pour optimiser la consommation en fonction de ce qu'il constate. Un must pour qui est sensibilisé au green computing.

X-Windows

Pour X-Windows, l'outil obligatoire est xrestop. Il vous permet d’auditer en temps réel les applications qui consomment le plus de ressources graphique.

Alors je vous préviens, cet outil est très mauvais pour le moral. Vous y découvrez par exemple que ce qui mange le plus de ressource peut être votre fond d'écran, la zooolie transparence dans votre console, ou plus classiquement ce maudit FireFox...

La première fois que j'ai testé l'outil la consommation mémoire du panda boulimique atteignait 1go !! Et, Ô surprise, même fermer tous les onglets n'y a rien changé. La seule "solution" a été de redémarrer le navigateur pour revenir à une consommation "normale" et ce avec EXACTEMENT les mêmes onglets ouverts sur les mêmes pages...

Le réseau

Pour auditer les mangeurs de bande passante nous disposons de plusieurs outils. Le plus simple à utiliser est jnettop qui affiche un classement des IP par KB/S reçus ou émis. Comme quasiment tous les outils top dédiés au réseau, jnettop utilise la libraire libpcap. Un outil équivalent mais moins précis est iftop.

Pour ceux qui ont besoin d'une analyse plus fine, l'outil iptraf fournit une interface un peu complexe en ncurse avec la possibilité de créer des fichiers de logs des interfaces audités.

Un peu simpliste nethogs permet lui aussi d'afficher les consommations réseau mais a la particularité de faire cela par processus, permettant ainsi de savoir précisément quelle application s'amuse à sucer la bande passante.

Plus spécialisé, il existe aussi apachetop qui, à partir des logs du serveur, permet d'observer en temps réel la consommation en bande passante des requêtes faites sur un site.

Plus spécialisé encore, et comme nethogs ou iptraf, basé sur la librairie libpcap, nous avons dnstop dédié aux propriétaires d'un serveur bind et permettant d'auditer la consommation exprimée en % du nombre total de requêtes par classe d'IP, domaine, sous domaine, etc.

Base de données

Allez, pour l'occasion, on va dire que mySql est une base de donnée, qui en l'occurrence dispose d'un outil bien pratique pour en auditer la consommation par processus. Il s'agit de mytop qui dispose d'une interface ncurse permettant de savoir quel utilisateur met la base à genoux.

PostgreSQL est quant à lui plus à la traîne en ce domaine. Rien de natif et juste un projet en python non abouti et un autre en perl que je n'ai pas encore testé.

Les traceurs

Une autre famille d'outil bien pratique pour débusquer les mangeurs de ressources est les « traceurs ». Les traceurs permettent d'obtenir une liste d'actions menées par un ou plusieurs processus ou ressources physiques. Cela donne généralement lieu à des "logs" qu'il faut ensuite analyser.

Exécution des programmes

Pour commencer, nous avons le peu connu et néanmoins indispensable strace qui vous permet de lister en temps réel les appels système fait par une commande lors de son exécution. Cela permet typiquement de comprendre pourquoi la maudite commande truc bloque sans que l'on sache pourquoi. Cela permet aussi de savoir quels sont les fichiers que la commande truc cherche à ouvrir. Bref, essayez là, c'est très explicite.

Mais pour passer à la vitesse au dessus, le mieux est oprofile. En effet, à mis chemin entre un traceur et un top, cet outil permet d'auditer Linux dans sa globalité et de savoir quel est le temps passé dans chacune des librairies du système. Grâce à lui vous pouvez par exemple constater que c'est la librairie flash qui est en train de consommer 60% de votre CPU alors qu'un simple top ne vous montrait que la boulimie de FireFox.

oprofile est composé de deux éléments : un démon (oprofiled) et un outil pour récupérer les statistiques (opreport). Vous pouvez sans aucune modification du noyau lancer le démon avec l'option --no-vmlinux. Mais pour obtenir une granularité descendant au niveau kernel, il faut que vous ayez compilé vous-même votre noyau pour le fournir à l'outil sous la forme d'un fichier vmlinux décompressé et doté de symboles. Vous remplacerez alors l'option --no-vmlinux par --vmlinux=/chemin/vers/vmlinux.

Trafic réseau

De la même manière que pour les appels systèmes, il est possible de tracer les actions faites sur le réseau. Tout d'abord avec l'excellent tcpdump qui comme les top réseau utilise libpcap, mais cette fois pour tracer chaque requêtes faites sur un LAN. Son utilisation est extrêmement simple et la syntaxe des règles s'inspire fortement de son grand frère graphique wireshark. Par exemple pour lister l'ensemble des requêtes faites sur l'interface eth0 en TCP sur le port 80 :

tcpdump -i eth1 tcp port 80

Plus spécifique au protocole HTTP, nous avons httpdebug qui faisant office de proxy et vous permet de tracer en temps réel l'ensemble des requêtes HTPP, et ce en clair. Idéal pour débusquer les pages anodines qui en réalité fliquent vos usages...

Commentaires

Dab, le 12 September, 2007 - 22:40

A mettre en parallèle de top tu as powertop qui, comme son nom l'indique, te retourne les process,libs,modules qui consomment le plus de puissance électrique. Très pratique dans le cas d'un portable ou d'un pda Wink

Ulhume, le 17 September, 2007 - 08:39

Ah ça, je le note, dans ma quête actuelle du "consommer-moins" ça m'intéresse. Merci !

Benj , le 20 February, 2008 - 13:55

Superbe article, très utile. Merci beaucoup pour tous ces logiciels !

Ulhume, le 20 February, 2008 - 14:00

De nada, content de voir que je ne suis pas le seul amateur de console Wink

jaguarondi, le 20 February, 2008 - 15:47

Ah, ça fait un moment que je me disais qu'il faudrait que je trouve un article du genre, j'avais pas encore cherché et là tu m'en ôtes l'occasion Smiling
La chasse va pouvoir commencer, merci.

Dab, le 20 February, 2008 - 17:01

Du même auteur que powertop tu as aussi latencytop : http://www.latencytop.org/
Sinon pour le réseau il y a aussi ntop, par contre assez gourmand en mémoire
Pour les IO disques il y a aussi iostat (sysstat)
Heu sinon pour l'utilisation très de tcpdump ... exemple du man : tcpdump ’tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)’ ... ça commence à devenir tordu non ?

Ulhume, le 20 February, 2008 - 16:59

latencytop, iostat, je les notes pour un mise à jour !

Sinon, ntop c'est pas un machin web ?

Ulhume, le 20 February, 2008 - 17:00

@jaguarondi Hey, tu vas chasser où, dans les démons du tux ? Wink

Dab, le 20 February, 2008 - 17:02

vi un machin web mais bien sympa pour les stats ou le controle des flux

Ulhume, le 20 February, 2008 - 17:04

@Dab oui mais j'ai bien dit que c'était juste des trucs texte sur cette page Wink

Ceci dit c'est vrai qu'il est sympa ET lourd...

Pour tcpdump c'est à peu prés aussi tordu que wireshark en fait Smiling Mais diablement efficace !

Dab, le 20 February, 2008 - 17:10

Houps j'avais lu en diagonale ... mais sinon tu peux toujours parser les logs de ntop Wink
tcpdump: ouai ça vaut tranquillement les modes de debug de cisco ... comprend pas qu'ils ne l'implémente pas.

Ulhume, le 20 February, 2008 - 17:09

@Dab oui, c'est ça, bonne idée Smiling))

advaya, le 20 February, 2008 - 17:21

Pour ce qui est spécifique au trafic réseau, ami Ulhume, puis-je me permettre de renvoyer, en complément à ton excellent billet, à la page suivante ? L'ensemble du site sur le sujet firewall est d'ailleurs pas mal fait il me semble, même si cela date de 2003 Wink

wistiti , le 20 February, 2008 - 18:29

Pour la consommation mémoire j'ai l'habitude d'utiliser gmemusage. C'est graphique mais en console, c'est pas mal.

jaguarondi, le 20 February, 2008 - 19:16

@Ulhume: daemon du tux en suspens, suis retourné sur mes petits processeurs pour préparer la prochaine prod et mon talk au Fosdem dimanche Smiling
http://www.fosdem.org/2008/schedule/events/embedded_robot

Ulhume, le 20 February, 2008 - 19:30

@wistiti c'est vrai que c'est graphique mais même si l'interface doit au moins avoir 20 ans (un util IRIX il me semble), ça reste assez frappant, visuellement parlant.

Ulhume, le 20 February, 2008 - 19:31

@jaguarondi prochaine prod ? Tux va avoir un p'tit frère ?

Sinon bonne chance pour ton talk. C'est retransmit quelque part ?

Dab, le 20 February, 2008 - 19:37

@advaya: Dommage que l'on ne puisse laisser des commentaires sur ton site Frown
Ulhume, je me permet d'utiliser ton blog pour lui soumettre quelques observations. (supprime les si ça te gêne)
Tcpdump sniff les paquets réseaux qui ne lui sont pas destinés SI la machine n'est PAS connectée à un switch, ce dernier limitant le domaine de broadcast (encore que cela soit tout de même possible). Et c'est parce qu'il doit passer la carte en mode "promiscuous" qu'il doit être exécuté en tant que root (ou avec un utilisateur ayant les droits)
Le traceroute n'est pas forcement icmp (Linux en udp et windows en icmp), il n'est pas non plus setuid sous Debian par exemple.

advaya, le 20 February, 2008 - 19:44

@ dab : c'est pas mon site à moi, hein ? Wink et je suis pas certain que le type traine par ici. Comme je disais, c'est une version de 2003 qu'il faut peut être prendre avec des pincettes. Du reste, c'est un peu HS par rapport au billet d'Ulhume, désolé ...

Ulhume, le 20 February, 2008 - 19:49

@Dab mais je t'en pris, mi casa es su casa Wink

Dab, le 20 February, 2008 - 19:50

Ah daccord ... sorry
Je n'ai pas insister ne voulant pas trop te blesser:) mais il y avait plein d'autres erreurs Wink

Dab, le 20 February, 2008 - 19:50

mi casa es su casa ... c'est quoi ça ?

Ulhume, le 20 February, 2008 - 19:52

Ca veut dire : fait comme chez toi Smiling

Dab, le 20 February, 2008 - 19:58

Faut que je replace ça Smiling
mi casa es su casa, you can même mettre les pieds sur la table

advaya, le 20 February, 2008 - 19:58

@dab : littéralement : "ma maison est votre maison" Wink

pour les erreurs, ça m'intéresse si tu peux (si tu as le courage) les lister, mais on va peut-être pas utiliser le billet d'Ulhume pour ça ... Ulhume a du t'envoyer mon email Wink

jaguarondi, le 20 February, 2008 - 21:41

@Ulhume: non, rien de neuf, juste relooké, la _peluche_ est remplacée par une espèce de plastique un peu caoutchouteux mais surtout moins salissant, le jaune est plus orange, et je pense que c'est tout. Sinon on change d'usine donc je repars carburer au thé et à la Kingway ou Tsing Tao pendant 6 semaines en Chine.

Au Fosdem, ils ne captent que les main tracks, pas les devrooms. On verra si j'ai l'occasion de faire filmer. Mais bon je vais déjà passer ma journée de demain à faire mes slides.

Dab, le 20 February, 2008 - 22:57

@advaya: ok répondu ... mais bon il a quand même bien bosser Smiling

Ulhume, le 21 February, 2008 - 11:02

@Jaguarondi Rha, toujours pas une *vraie* fourrure alors... Sinon, la mécanique interne va changer ? Il sera moins *bruyant* lors des déplacement ?

didinside , le 21 February, 2008 - 12:13

Tres interessant. Un outil qui onctionne pas mal est Dstat (Dstat is a versatile replacement for vmstat, iostat, netstat, nfsstat and ifstat.). Je l'utilise sur nos serveurs lorsque ceux-ci "ramme".

theclimber , le 21 February, 2008 - 13:51

Merci pour l'article, il y avait encore quelques outils que je ne connaissait pas visiblement Wink On en apprend tous les jours ... et moi qui utilisait top au lieu de htop ... comme l'homme des caverne qui allume son feu avec des silex alors qu'il y a des allumettes dans le tiroir du bas Sticking out tongue

Hors contexte, quelques fautes de frappe que j'ai soulevé : "mi-chemin" et pas "mis chemin" et "HTTP" au lieu de "HTPP" ...

Bon, je commence à hésiter d'aller au fosdem ... c'est vrai que c'est à 20min de chez moi ... Arf on verra samedi

mhoungbo , le 21 February, 2008 - 22:46

Un grand grand grand merci pour m'avoir fait decouvrir powertop d'intel Smiling

mon pc s'est nettement ameliorer Smiling

jaguarondi, le 22 February, 2008 - 11:00

@Ulhume, rien de neuf sinon, ils sont ent rain de réviser le tooling pour l'améliorer, peut-être légèrement moins bruyant. Mais tant qu'on ne passe pas à des moteurs pas à pas, ça ne fera pas grande différence.

Sinon le Fosdem, c'est quand même un bel événement, il y a plus de 200 confs je pense, assez peuplé et bon esprit. J'espère y passer tout le w.e., faut vite que je termine mes slides plutôt que de lire ton blog Wink (do it now, do it now, do it now ...)

Au fait, ça ne manque pas d'un forum (bar ou autre coin tranquille) ton site?, histoire de ne pas polluer tes beaux billets techniques.

nico_ze_poo , le 10 March, 2008 - 16:29
Ulhume, le 15 March, 2008 - 10:07

@nico_ze_poo
Velu le dstat, il va falloir que je le teste pour de vrai !

advaya, le 19 August, 2008 - 21:43

Un petit comment pour signaler, dans la famille des *top, un utilitaire qui se charge de monitorer les accès I/O (notamment utile quand on veut savoir quels sont les process qui font des accès disque fréquents). Il s'appelle tout simplement iotop, disponible via un simple urpmi, les sources se trouvant par la : http://guichaz.free.fr/iotop/

Par rapport à iostat, je le trouve un poil plus explicite, mais j'avoue que je n'ai pas regardé toutes les options de iostat ...

Ulhume, le 24 August, 2008 - 08:14

Ah ? Bé je vais tester cela de suite car j'ai l'audio qui béguaille sur mon I810 et je soupçonne un PB d'IO.

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...