<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1209"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1209/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1209/atom/feed</id>
  <updated>2008-10-01T16:07:32+02:00</updated>
  <entry>
    <title>Débusquer les rongeurs de ressources...</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1209" />
    <id>http://artisan.karma-lab.net/node/1209</id>
    <published>2008-02-20T13:07:20+01:00</published>
    <updated>2008-10-01T16:07:32+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Serveurs" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Article" />
    <summary type="html"><![CDATA[<p>
	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.   
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
	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.   
</p>
<!--break-->
<p>
  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 <kbd>ncurse</kbd> permettant un contrôle au clavier, la colorisation et même l'utilisation de la souris.   
</p>


	<a name='chapter_1'></a>
  <h2>les top's</h2>
	
<p>
  Les outils de la famille <q>top</q> 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.  
</p>

<h3>Mémoire et CPU</h3>
<p>
  La commande <kbd>top</kbd> est aussi répandue sur les systèmes *NIX que <kbd>vi</kbd>. Vous pouvez toujours compter sur elle car elle sera toujours installée sur une machine, quelle que soit la distribution utilisée. 
</p>
<p>
  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 <kbd>?</kbd> permet d'avoir accès aux nombreuses options de tri, de choix de colonne, etc. Une commande à maîtriser donc (comme vi <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>. 
</p>

<p>
  <image id="1" width="150"/>
  Mais bien mieux que <kbd>top</kbd>, nous avons <kbd>htop</kbd>. 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 à <kbd>ncurse</kbd>. Vous pouvez donc sélectionner les processus, les tuer (touche <kbd>k</kbd>) les grouper par thread, etc. En pressant la touche <kbd>p</kbd>, l'ensemble des processus sera trié par leur charge machine et avec <kbd>m</kbd> ce sera par mémoire consommée.  
</p>


<p>
  Pour finir, un petit passage sur un top que j'aime beaucoup mais qui n'est utilisable que sur les kernels récents : <kbd>powertop</kbd>. 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 <q>green computing</q>. 
</p>

<h3>X-Windows</h3>
<p>
  <image id="2" width="150"/>
   Pour X-Windows, l'outil obligatoire est <kbd>xrestop</kbd>. Il vous permet d’auditer en temps réel les applications qui consomment le plus de ressources graphique. 
</p>
<p>
  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...
</p>
<p>
	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...   
</p>

<h3>Le réseau</h3>
<p>
  <image id="3" width="150"/>
   Pour auditer les mangeurs de bande passante nous disposons de plusieurs outils. Le plus simple à utiliser est <kbd>jnettop</kbd> qui affiche un classement des IP par KB/S reçus ou émis. Comme quasiment tous les outils <q>top</q> dédiés au réseau, <kbd>jnettop</kbd> utilise la libraire <kbd>libpcap</kbd>. Un outil équivalent mais moins précis est <kbd>iftop</kbd>.
</p>
<p>
  Pour ceux qui ont besoin d'une analyse plus fine, l'outil <kbd>iptraf</kbd> fournit une interface un peu complexe en ncurse avec la possibilité de créer des fichiers de logs des interfaces audités.  
</p>    
<p>
  Un peu simpliste <kbd>nethogs</kbd> 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.  
</p>
<p>
  Plus spécialisé, il existe aussi <kbd>apachetop</kbd> 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. 
</p>
<p>
  Plus spécialisé encore, et comme <kbd>nethogs</kbd> ou <kbd>iptraf</kbd>, basé sur la librairie <kbd>libpcap</kbd>, nous avons <kbd>dnstop</kbd> 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. 
</p>

<h3>Base de données</h3>
<p>
  Allez, pour l'occasion, on va dire que mySql <i>est</i> 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 <kbd>mytop</kbd> qui dispose d'une interface ncurse permettant de savoir quel utilisateur met la base à genoux. 
</p>
<p>
  PostgreSQL est quant à lui plus à la traîne en ce domaine. Rien de natif et juste un <a href='#' title='Avant de mourrir, ce lien pointait sur : http://pgfoundry.org/projects/pgtop/' >projet en python non abouti</external> et un <dead href=\"http://search.cpan.org/~cosimo/pgtop-0.04/pgtop\">autre en perl</a> que je n'ai pas encore testé.
</p>


	<a name='chapter_2'></a>
  <h2>Les traceurs</h2>
	
<p>
  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. 
</p>
<h3>Exécution des programmes</h3>
<p>
  Pour commencer, nous avons le peu connu et néanmoins indispensable <kbd>strace</kbd> 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 <kbd>truc</kbd> bloque sans que l'on sache pourquoi. Cela permet aussi de savoir quels sont les fichiers que la commande <kbd>truc</kbd> cherche à ouvrir. Bref, essayez là, c'est très explicite.
</p>

<p>
  Mais pour passer à la vitesse au dessus, le mieux est <a class='external' target='_blank' href='http://oprofile.sourceforge.net/' >oprofile</a>. 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 <kbd>top</kbd> ne vous montrait que la boulimie de FireFox. 
</p>
<p>
  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 <kbd>--no-vmlinux</kbd>. Mais pour obtenir une granularité descendant au niveau kernel, il faut que vous ayez <a class='external' target='_blank' href='/node/18' >compilé vous-même votre noyau</a> pour le fournir à l'outil sous la forme d'un fichier vmlinux décompressé et doté de symboles. Vous remplacerez alors l'option <kbd>--no-vmlinux</kbd> par <kbd>--vmlinux=/chemin/vers/vmlinux</kbd>. 
</p>

<h3>Trafic réseau</h3>
<p>
  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 <kbd>tcpdump</kbd> qui comme les <q>top réseau</q> 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 <kbd>wireshark</kbd>. Par exemple pour lister l'ensemble des requêtes faites sur l'interface <kbd>eth0</kbd> en <kbd>TCP</kbd> sur le port <kbd>80</kbd> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  tcpdump -i eth1 tcp port <span class="nu0">80</span>
  </div>
  
  </div>
</P>

<p>
   Plus spécifique au protocole HTTP, nous avons <a href='#' title='Avant de mourrir, ce lien pointait sur : http://www.reitshamer.com/technology/httpdbg.html' >httpdebug</a> qui faisant office de 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/proxy'>
  proxy
  </a> 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...  
</p>    ]]></content>
  </entry>
</feed>
