<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MilamberSpace &#187; Non classé</title>
	<atom:link href="http://blog.milamberspace.net/index.php/category/non-classe/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.milamberspace.net</link>
	<description>JMeter (surtout) mais aussi l&#039;Informatique, Internet, etc.</description>
	<lastBuildDate>Sun, 29 Aug 2010 21:29:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Changement de thème pour le blog</title>
		<link>http://blog.milamberspace.net/index.php/2009/07/11/changement-de-theme-pour-le-blog-402.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/07/11/changement-de-theme-pour-le-blog-402.html#comments</comments>
		<pubDate>Sat, 11 Jul 2009 21:18:48 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[thème]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=402</guid>
		<description><![CDATA[Comme vous le constatez, le blog change de peau.
Un nouveau thème, dont le principal objectif est d&#8217;avoir une largeur extensible sur toute la largeur de l&#8217;écran (du navigateur).
Cela va permettre plus de flexibilité sur les articles tutoriel, pour les captures d&#8217;écran.
./
]]></description>
			<content:encoded><![CDATA[<p>Comme vous le constatez, le blog change de peau.</p>
<p>Un nouveau thème, dont le principal objectif est d&#8217;avoir une largeur extensible sur toute la largeur de l&#8217;écran (du navigateur).</p>
<p>Cela va permettre plus de flexibilité sur les articles tutoriel, pour les captures d&#8217;écran.</p>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/07/11/changement-de-theme-pour-le-blog-402.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestion des packages avec YUM sans connexion Internet et avec le dvd Redhat</title>
		<link>http://blog.milamberspace.net/index.php/2008/11/15/gestion-des-packages-avec-yum-sans-connexion-internet-et-avec-le-dvd-redhat-101.html</link>
		<comments>http://blog.milamberspace.net/index.php/2008/11/15/gestion-des-packages-avec-yum-sans-connexion-internet-et-avec-le-dvd-redhat-101.html#comments</comments>
		<pubDate>Sat, 15 Nov 2008 19:26:57 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[RedHat]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Yum]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=101</guid>
		<description><![CDATA[Mise à jour le 19/08/2010
Pour ceux qui ne connaissent pas YUM, ce dernier est un utilitaire bien pratique dans les distributions Linux utilisant les packages RPM, tel que RedHat ou CentOS.
YUM permet en effet de faire la gestion des packages sur ces types de distributions, en gérant les dépendances entre les packages, c&#8217;est-à-dire que si [...]]]></description>
			<content:encoded><![CDATA[<p><em><span style="text-decoration: underline;">Mise à jour le 19/08/2010</span></em></p>
<p>Pour ceux qui ne connaissent pas <strong>YUM</strong>, ce dernier est un utilitaire bien pratique dans les distributions Linux utilisant les packages RPM, tel que RedHat ou CentOS.</p>
<p>YUM permet en effet de faire la gestion des packages sur ces types de distributions, en gérant les dépendances entre les packages, c&#8217;est-à-dire que si vous voulez installer par exemple PHP sur votre serveur Linux RedHat, il suffit de faire <em>« yum install php »</em> et hop, tous les packages nécessaires à PHP vont être installés (entre autres le serveur Apache HTTP <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).</p>
<p>Mais pour cela, YUM a besoin d&#8217;une connexion à Internet pour 1/ localiser le package désiré, 2/ télécharger son entête pour voir ses dépendances, 3/ télécharger les entêtes de ses dépendances et générer également les dépendances de ses dépendances, 4/ puis quand il n&#8217;y a plus de dépendances à gérer, procéder au téléchargement et à l&#8217;installation.</p>
<p>Le problème est que parfois, la connexion à Internet n&#8217;est pas disponible pour faire des installations ou des mises à jour sur des serveurs dans des salles blanches sécurisées. <em>Pas de problème,</em> YUM avec un peu de configuration sait aussi travailler en « local », à partir du média d&#8217;origine ou d&#8217;une version de mise à jour.<span id="more-101"></span></p>
<p>Donc, pour pouvoir faire des installations ou des mises à jour depuis le DVD (ou les Cdroms) de Redhat, il faut bien entendu le media, ou mieux l&#8217;image ISO du media.</p>
<p>Ici c&#8217;est l&#8217;image ISO de la Redhat Linux Entreprise (RHEL) version 5.2 pour processeurs Intel avec les extensions 64 bits : <em>rhel-5.2-server-x86_64-dvd.iso</em></p>
<p>Comme pré-requis, j&#8217;ai déposé l&#8217;image ISO dans le répertoire /root/dvd_redhat/</p>
<p><strong><span style="text-decoration: underline;">Etape 1 :</span></strong> Montage de l&#8217;image ISO sur le système de fichiers afin de récupérer les packages RPM qui serviront à l&#8217;installation ou à la mise à jour.</p>
<pre><span style="color: #800000;"><strong>mkdir /root/dvd_redhat/disk/</strong></span></pre>
<pre><span style="color: #800000;"><strong>mount -o loop /root/dvd_redhat/rhel-5.2-server-x86_64-dvd.iso /root/dvd_redhat/disk/</strong></span></pre>
<p>La commande &laquo;&nbsp;<em>mount -o loop</em>&nbsp;&raquo; qui commence à être de plus en plus connue, permet « d&#8217;ouvrir » une image ISO, et de la monter sur l&#8217;arborescence de fichiers. Ici, dans le répertoire /root/dvd_redhat/disk/</p>
<p><span style="text-decoration: underline;"><strong>Etape 2 :</strong></span> Récupération des packages RPM dans un nouveau répertoire.</p>
<p>L&#8217;image ISO montée étant en mode lecture seule, il faut copier les fichiers RPM vers un répertoire en lecture/écriture (pour faire l&#8217;étape 4).</p>
<pre><span style="color: #800000;"><strong>mkdir /root/dvd_redhat/RPM</strong></span></pre>
<pre><span style="color: #800000;"><strong>cd /root/dvd_redhat/disk/Server/</strong></span></pre>
<pre><span style="color: #800000;"><strong>cp *.rpm /root/dvd_redhat/RPM/</strong></span></pre>
<p><strong><span style="text-decoration: underline;">Etape 3 :</span></strong> Installation de l&#8217;utilitaire createrepo</p>
<p>On profite d&#8217;être dans le répertoire qui contient tous les packages RPM, pour installer manuellement l&#8217;utilitaire createrepo, ce dernier permettant de faire l&#8217;étape suivante.</p>
<pre><span style="color: #800000;"><strong>rpm -i createrepo-0.4.11-3.el5.noarch.rpm
</strong></span></pre>
<p><span style="color: #000000;">dans le cas d&#8217;une installation RedHat vide (sans aucun paquetage coché lors de l&#8217;installation), prendre cette ligne de commande :</span></p>
<p><span style="color: #800000;"> </span></p>
<pre><span style="color: #800000;"><strong>rpm -i createrepo-0.4.11-3.el5.noarch.rpm libxml2-python-2.6.26-2.1.2.8.i386.rpm rpm-python-4.4.2.3-18.el5.i386.rpm
yum-metadata-parser-1.1.2-3.el5.i386.rpm yum-3.2.22-26.el5.noarch.rpm python-elementtree-1.2.6-5.i386.rpm
python-iniparse-0.2.3-4.el5.noarch.rpm python-sqlite-1.1.7-1.2.1.i386.rpm
python-urlgrabber-3.1.0-5.el5.noarch.rpm m2crypto-0.16-6.el5.6.i386.rpm
</strong></span></pre>
<p><strong><span style="text-decoration: underline;">Etape 4 :</span></strong> Création du nouveau référentiel (repository) de fichier</p>
<p>On se place sur le nouveau répertoire contenant les RPM copiés de l&#8217;image ISO, et on va créer un nouveau référentiel (index) des fichiers RPM avec la commande createrepo.</p>
<pre><span style="color: #800000;"><strong>cd /root/dvd_redhat/RPM/</strong></span></pre>
<pre><span style="color: #800000;"><strong>createrepo ./</strong></span></pre>
<p>La commande <em>createrepo</em> prend comme argument le répertoire courant, ici /root/dvd_redhat/RPM/ .</p>
<p>Elle va créer un ensemble de fichiers dans un sous-repertoire <em>./repodata/</em></p>
<p>Tiens, on a plus besoin du montage de l&#8217;image ISO, on en profite pour démonter&#8230;</p>
<pre><span style="color: #800000;"><strong>umount /root/dvd_redhat/disk/</strong></span></pre>
<p><strong><span style="text-decoration: underline;">Etape 5 :</span></strong> Création du fichier de référence du nouveau référentiel</p>
<p>Pour que YUM puisse utiliser notre nouveau référentiel, il faut lui ajouter sa référence dans sa configuration. Sous RHEL, il faut simplement créer le fichier suivant :</p>
<pre><span style="color: #800000;"><strong>vi /etc/yum.repos.d/RedHat-Media.repo
======================CONTENU=====================================
[redhat-media]
name=RedHat-$releasever - Media
baseurl=file:///root/dvd_redhat/RPM/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
==================================================================</strong></span></pre>
<p><strong><span style="text-decoration: underline;">Etape 6 :</span></strong> utilisation de YUM</p>
<p>On va commencer par faire un nettoyage de YUM avec le commande suivante :</p>
<pre><span style="color: #800000;"><strong>yum --disablerepo=\* --enablerepo=redhat-media --noplugins clean all</strong></span></pre>
<p>On notera le <em>« &#8211;disablerepo=\* »</em> qui permet de désactiver toutes les références vers d&#8217;autres référentiels, le <em>« &#8211;enablerepo=redhat-media »</em> qui indique que l&#8217;on souhaite travaillait avec notre nouveau référentiel, et pour finir l&#8217;option <em>« &#8211;noplugins » </em>qui va désactiver tous les plugins, notamment celui du RHN qui nécessite une connexion Internet que nous n&#8217;avons pas.</p>
<p>Le <em>« clean all » </em>commandant le nettoyage du cache de YUM.</p>
<p>Voilà.</p>
<p>Ensuite, on peut utiliser YUM pour gérer les installations, les désinstallations, les mises à jour de ses packages en gérant les dépendances.</p>
<p><strong><span style="text-decoration: underline;">Pour une installation :</span></strong></p>
<pre><span style="color: #800000;"><strong>yum --disablerepo=\* --enablerepo=redhat-media --noplugins install &lt;nom_package(s)&gt;</strong></span></pre>
<p><span style="text-decoration: underline;"><strong>Pour une suppression :</strong></span></p>
<pre><span style="color: #800000;"><strong>yum --disablerepo=\* --enablerepo=redhat-media --noplugins remove &lt;nom_package(s)&gt;</strong></span></pre>
<p><span style="text-decoration: underline;"><strong>Pour une mise à jour de version sur l&#8217;ensemble des packages</strong></span> (par exemple un passage de RHEL 5.1 à RHEL 5.2)</p>
<pre><span style="color: #800000;"><strong>yum --disablerepo=\* --enablerepo=redhat-media --noplugins update</strong></span></pre>
<p>Bon courage.</p>
<p>./</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 741px; width: 1px; height: 1px; overflow: hidden;">rpm -i createrepo-0.4.11-3.el5.noarch.rpm libxml2-python-2.6.26-2.1.2.8.i386.rpm rpm-python-4.4.2.3-18.el5.i386.rpm yum-metadata-parser-1.1.2-3.el5.i386.rpm yum-3.2.22-26.el5.noarch.rpm python-elementtree-1.2.6-5.i386.rpm python-iniparse-0.2.3-4.el5.noarch.rpm python-iniparse-0.2.3-4.el5.noarch.rpm python-sqlite-1.1.7-1.2.1.i386.rpm python-urlgrabber-3.1.0-5.el5.noarch.rpm m2crypto-0.16-6.el5.6.i386.rpm</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2008/11/15/gestion-des-packages-avec-yum-sans-connexion-internet-et-avec-le-dvd-redhat-101.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mon eeePC 701 et mon premier ordinateur portable (Toshiba T2150CDS) datant de 1996</title>
		<link>http://blog.milamberspace.net/index.php/2008/08/21/mon-eeepc-701-et-mon-premier-ordinateur-portable-toshiba-t2150cds-datant-de-1996-89.html</link>
		<comments>http://blog.milamberspace.net/index.php/2008/08/21/mon-eeepc-701-et-mon-premier-ordinateur-portable-toshiba-t2150cds-datant-de-1996-89.html#comments</comments>
		<pubDate>Thu, 21 Aug 2008 18:17:34 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Ordinateur]]></category>
		<category><![CDATA[701]]></category>
		<category><![CDATA[Asus]]></category>
		<category><![CDATA[eeePC]]></category>
		<category><![CDATA[portable]]></category>
		<category><![CDATA[T2150CDS]]></category>
		<category><![CDATA[Toshiba]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=89</guid>
		<description><![CDATA[Un tour de nostalagie avec mon premier ordinateur portable, il s&#8217;agit d&#8217;un Toshiba T2150CDS datant de l&#8217;été 1996. Le processeur est un 486 DX, cadencé à 75 Mhz ! La belle époque.
Il fonctionne à ce jour (août 2008) avec Windows 95, la batterie est morte par contre (c&#8217;est bien normal). Evidemment ce n&#8217;est pas une [...]]]></description>
			<content:encoded><![CDATA[<p>Un tour de nostalagie avec mon premier ordinateur portable, il s&#8217;agit d&#8217;un Toshiba T2150CDS datant de l&#8217;été 1996. Le processeur est un 486 DX, cadencé à 75 Mhz ! La belle époque.</p>
<p>Il fonctionne à ce jour (août 2008) avec Windows 95, la batterie est morte par contre (c&#8217;est bien normal). Evidemment ce n&#8217;est pas une bête de course, et avec ses 500 Mo de disque dur, je ne vais pas aller loin maintenant.</p>
<p><a href="http://blog.milamberspace.net/wp-content/uploads/2008/08/r0014765.jpg"><img class="alignnone size-medium wp-image-90" title="Toshiba T2150CDS" src="http://blog.milamberspace.net/wp-content/uploads/2008/08/r0014765.jpg" alt="Mon premier ordinateur portable datant de 1996" width="200" height="300" /></a></p>
<p><span id="more-89"></span>Bon, il faut aussi revenir dans le présent, j&#8217;ai fait l&#8217;aquisition du fameux eeePC d&#8217;Asus, j&#8217;ai pris le premier modèle, le numéro 701 livré avec la distribution Linux Xandros, ceci via le site de commerce Amazon (très bon prix).</p>
<p>Dès réception, j&#8217;ai installé à la place du Xandros, la version Ubuntu eee, histoire de capitaliser sur la distribution Linux que j&#8217;utilise sur mon portable actuel et principal (rappel : un Dell D820).</p>
<p>L&#8217;installation s&#8217;est passée sans problème, et il marche bien. Il est évidemment moins rapide que mon D820. L&#8217;impression la plus importante que j&#8217;ai, c&#8217;est sa petite taille. Sinon la qualité de l&#8217;écran est bonne, la taille reste petite aussi avec une résolution faible (800&#215;600) qui nécessite de faire un Zoom Out dans Firefox pour voir les sites web dans toute leur largeur.</p>
<p>La raison de l&#8217;achat, est simplement, que vu son faible prix, j&#8217;avais envie d&#8217;avoir une machine pour s&#8217;amuser à tester des choses en dehors de mon ordinateur principal. Il est certain que je ne vais pas m&#8217;en servir pour travailler tous les jours avec. Cependant je me vois bien l&#8217;amener en vacances avec moi plutôt que le &#8216;gros&#8217; D820.</p>
<p><a href="http://blog.milamberspace.net/wp-content/uploads/2008/08/r0014760.jpg"><img class="alignnone size-medium wp-image-91" title="Mon Asus eeePC 701" src="http://blog.milamberspace.net/wp-content/uploads/2008/08/r0014760.jpg" alt="Mon premier eeePC 701" width="300" height="200" /></a></p>
<p>Et pour finir une photo d&#8217;une petite comparaison de taille avec l&#8217;écran fermé entre le Asus eeePC et le Toshiba T2150CDS.</p>
<p><a href="http://blog.milamberspace.net/wp-content/uploads/2008/08/r0014769.jpg"><img class="alignnone size-medium wp-image-92" title="Comparaison entre eeePC et Toshiba T2150CDS" src="http://blog.milamberspace.net/wp-content/uploads/2008/08/r0014769.jpg" alt="Comparaison entre eeePC et Toshiba T2150CDS" width="300" height="200" /></a></p>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2008/08/21/mon-eeepc-701-et-mon-premier-ordinateur-portable-toshiba-t2150cds-datant-de-1996-89.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JMeter &#8211; Fixer la durée de répétition d&#8217;une requête</title>
		<link>http://blog.milamberspace.net/index.php/2008/08/15/jmeter-fixer-la-duree-de-repetition-dune-requete-87.html</link>
		<comments>http://blog.milamberspace.net/index.php/2008/08/15/jmeter-fixer-la-duree-de-repetition-dune-requete-87.html#comments</comments>
		<pubDate>Fri, 15 Aug 2008 09:00:09 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Intervalle]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=87</guid>
		<description><![CDATA[Vous utilisez JMeter pour faire un tir de charges (ou autres), et vous devez avoir une requête qui s&#8217;exécute à un intervalle fixe quelque soit le temps de réponse de la requête.
Par exemple, vous devez exécuter une requête chaque 20 secondes, le temps de réponse de la dite requête est 4,5 sec. Donc si on [...]]]></description>
			<content:encoded><![CDATA[<p style="">Vous utilisez JMeter pour faire un tir de charges (ou autres), et vous devez avoir une requête qui s&#8217;exécute à<strong> un intervalle fixe</strong> <strong>quelque soit le temps de réponse de la requête</strong>.</p>
<p style="">Par exemple, vous devez exécuter une requête chaque 20 secondes, le temps de réponse de la dite requête est 4,5 sec. Donc si on démarre à T0, on a T0+4,5 sec la requête, puis on demande à JMeter de faire une pause pendant (20 sec – 4,5 sec = 15,5 sec), puis une nouvelle requête, etc.</p>
<p style=""><img src="/wp-content/images/jmeter08-img/01-time.png" alt="Schéma de répétition d'une requête à interval fixe" width="689" height="94" /></p>
<p style=""><em>Voici comme le faire avec JMeter.</em><span id="more-87"></span></p>
<p style=""><img style="border: 1px solid black;" src="/wp-content/images/jmeter08-img/00-test-plan.png" alt="Test Plan Jmeter" width="687" height="273" /></p>
<p style="">Dans l&#8217;élément <strong>User Defined Variables</strong>, on place une variable qui sera la durée fixe (en millisecondes) de l&#8217;intervalle.</p>
<p style=""><img style="border: 1px solid black;" src="/wp-content/images/jmeter08-img/02-user-defined-variables.png" alt="Element User Defined Variables" width="603" height="142" /></p>
<p style="">On place également un élément <strong>Transaction Controller </strong>qui contient l&#8217;élément <strong>HTTP Request</strong> (ou plusieurs éléments<strong> HTTP Request</strong>). A l&#8217;intérieur de l&#8217;élément <strong>HTTP Request</strong> (ou du premier élément), on ajoute un élément <strong>User Parameters</strong>, dans lequel on ajoute une variable START qui sera initialisée à « <em>${__time(,)}</em> », c&#8217;est à dire au temps en millisecondes de début de la requête.</p>
<p style=""><img style="border: 1px solid black;" src="/wp-content/images/jmeter08-img/03-users_parameters.png" alt="Element Users Parameters" width="598" height="147" /></p>
<p>Ensuite en dernier élément du<strong> Transaction Controller</strong>, on ajoute un élément <strong>Test Action</strong>, qui sera chargé de mettre en pause le thread group durant l&#8217;intervalle de temps d&#8217;attente. Pour cela on définit sa durée avec la formule suivante : « <em>${__longSum(${INTERVALLE},${START},-${__time()})}</em> ». Cette dernière fait le calcul du temps à attendre par rapport à la variable START et la variable INTERVALLE.</p>
<p style=""><img style="border: 1px solid black;" src="/wp-content/images/jmeter08-img/04-test-action.png" alt="Element Test Action" width="401" height="160" /></p>
<p style="">On ajoute les autres éléments restants (cookie manager, http request defaults, etc). Puis, on peut lancer un petit tir de contrôle de bon fonctionnement. Ici le <strong>Thread Group</strong> est à 1-1-4 (1 user, ramp-up à 1 sec, 4 boucles).</p>
<p style="">Le résultat est ci-dessous. On voit que les requêtes durent en moyenne 5,7 secondes, et que chaque requête est appelée chaque 20 secondes (l&#8217;élément<strong> Transaction Controller </strong>donnant le temps passé de la requête HTTP + du Test Action).</p>
<p style=""><img style="border: 1px solid black;" src="/wp-content/images/jmeter08-img/05-summary-results.png" alt="Résultats du tir" width="710" height="166" /></p>
<p style="">Et voilà, avec ce type de scénario, on peut répondre à un besoin du type &laquo;&nbsp;<em>je veux que mon utilisateur exécute chaque 20 secondes une requête quelque soit le temps de réponse de la requête</em>&laquo;&nbsp;</p>
<p style="">Le script JMeter est téléchargeable <a href="https://blog.milamberspace.net/wp-content/uploads/fichiers/Duree_Thread_fr.jmx.zip">ici</a>.</p>
<p style="">
<p style="">./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2008/08/15/jmeter-fixer-la-duree-de-repetition-dune-requete-87.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tir de charges : Quand les problèmes ne viennent pas du serveur d&#8217;applications</title>
		<link>http://blog.milamberspace.net/index.php/2007/12/21/tir-de-charges-quand-les-problemes-ne-viennent-pas-du-serveur-dapplications-56.html</link>
		<comments>http://blog.milamberspace.net/index.php/2007/12/21/tir-de-charges-quand-les-problemes-ne-viennent-pas-du-serveur-dapplications-56.html#comments</comments>
		<pubDate>Fri, 21 Dec 2007 00:27:58 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Supervision]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[Tir de charges]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/index.php/2007/12/21/tir-de-charges-quand-les-problemes-ne-viennent-pas-du-serveur-dapplications-56.html</guid>
		<description><![CDATA[Pour les « grands » tirs de charges dont l&#8217;objectif est de tester une nouvelle application J2EE (ou JEE) avant sa mise en production, et afin d&#8217;éviter les crashs le jour du lancement, on mobilise en général une équipe des différents « corps de métier » informatiques.
On aura ainsi :

les « tireurs » ceux qui [...]]]></description>
			<content:encoded><![CDATA[<p>Pour les « grands » tirs de charges dont l&#8217;objectif est de tester une nouvelle application J2EE (ou JEE) avant sa mise en production, et afin d&#8217;éviter les crashs le jour du lancement, on mobilise en général une équipe des différents « corps de métier » informatiques.</p>
<p style="">On aura ainsi :</p>
<ul>
<li>les « tireurs » ceux qui vont faire le tir de charges avec un outil dédié,</li>
<li>les fonctionnels qui assistent les tireurs pour la scénarisation du tir,</li>
<li>les préparateurs de données qui sont chargés de fournir des données aux injecteurs pour le tir,</li>
<li>les gens du réseau pour la surveillance du trafic et de la bande passante,</li>
<li>les DBA pour la surveillance de l&#8217;activité de la base de données,</li>
<li>les superviseurs des serveurs d&#8217;applications pour monitorer l&#8217;activité de l&#8217;application,</li>
<li>l&#8217;équipe de développement de l&#8217;application qui croisent les doigts,</li>
<li>et bien sur les chefs du fonctionnel et les chefs de la technique</li>
</ul>
<p style="">Tout cela fait beaucoup de monde, on ajoutera en général un responsable général, chargé entre autre de synchroniser toutes les actions, et donner le GO du lancement.</p>
<p style="">Une fois que le tir lancé et terminé, l&#8217;expérience montre que c&#8217;est en général du coté du serveur d&#8217;applications J2EE que les problèmes sont visibles. Où s&#8217;ils ne sont pas visibles, on pense à lui en premier car c&#8217;est lui qui supporte l&#8217;application. Alors quand c&#8217;est vous le responsable de la supervision du cluster de serveurs d&#8217;applications, tout ce beau monde se retourne vers vous pour avoir l&#8217;explication, le comment du pourquoi, afin de comprendre la raison du non succès du tir de charge&#8230;</p>
<p style="">Pourtant vous avez fait une configuration des serveurs d&#8217;applications clustérisés <em>aux petits oignons</em> :</p>
<ul>
<li>configuration de la taille minimum et maximum idéale pour ce type d&#8217;application</li>
<li>modification des paramètres de JVM pour avoir notamment un fonctionnement du Garbage Collector en (quasi) parallèle (Concurrent Mark Sweep)</li>
<li>réglage des unités d&#8217;exécution min et max, temps d&#8217;inactivité</li>
<li>réglage du pool de connexions à la base de données, avec activation du cache des requêtes SQL préparées</li>
<li>réglage du gestionnaire de sessions</li>
<li>activation du monitoring,</li>
<li>et d&#8217;autres petits réglages <em>de derrière les fagots</em> : taille des files d&#8217;attente TCP, nombre des requêtes keep-alive, etc</li>
</ul>
<p style="">Alors avec ce tunning <em>de folie</em>, difficile de comprendre pourquoi le serveur d&#8217;applications souffre lors du tir de charges&#8230;<span id="more-56"></span></p>
<p style="">Voici quelques cas, dont le problème est visible sur le serveur d&#8217;applications, mais l&#8217;origine est ailleurs :</p>
<p style="">1/ le serveur d&#8217;applications explose en OutOfMemory&#8230; C&#8217;est en général de la faute à l&#8217;application développée ou de l&#8217;utilisation du framework de persistence (genre Hibernate). Un exemple, c&#8217;est le chargement de plusieurs fois un million d&#8217;enregistrement dans la mémoire (car plusieurs centaines d&#8217;utilisateurs simulés et non plus les quelques développeurs et testeurs de la recette). On aura ainsi par exemple, 100 fois 10 Mo dans la mémoire soit au moins 1Go, donc des OutOfMemory si la taille maximum de la mémoire JVM est à 1024 Mo.</p>
<p style="">2/ le nombre maximal des unités d&#8217;exécution est atteint. C&#8217;est en général de la faute de l&#8217;application développée ou bien de la base de données. En effet si le nombre max est atteint, mais que la CPU du serveur n&#8217;est pas utilisée, on peut en déduire que les unités d&#8217;exécution sont en attente de quelque chose&#8230; Et souvent c&#8217;est de résultat de la base de données. Soit cette dernière est surchargée, soit il manque quelques index quelque part ou tout simplement il faut régénérer les statistiques de la base de données.</p>
<p style="">3/ Tout va bien sur le serveur d&#8217;application, sur la base de données, etc, mais l&#8217;application est « lente » à la réponse. Et bien là on peut se poser la question du réseau. Il convient de s&#8217;assurer que toutes les cartes réseaux soient configurées en 100 Mbits/s Full Duplex (ou en gigabit), que les switchs d&#8217;interconnexion également (port par port), et les routeurs si il y a lieu. Le mieux est de faire un test FTP (via un client classique vers le serveur, ou via JMeter). En effet, on verra que si l&#8217;une des interfaces est en 10 Mbits/s half duplex, par exemple celle du répartiteur de charges, et l&#8217;ensemble des serveurs derrière ne seront pas surchargés, mais l&#8217;application sera désespérément lente (goulot d&#8217;étranglement sur le lien réseau). (pour l&#8217;histoire, une interface réseau peut basculer en 10 Mbits/s HD tout simplement car l&#8217;auto négociation de vitesse avec le switch a échoué, et ainsi la carte prend la valeur la plus basse&#8230;</p>
<p style="">4/ Les pages de l&#8217;application affichent des erreurs 500&#8230; c&#8217;est en général un problème applicatif engendré par un problème externe. Par exemple l&#8217;atteinte du nombre maximum autorisé de fichiers ouverts pour un processus, ou bien la base de données n&#8217;accepte plus de nouvelles connexions&#8230;</p>
<p style="">Par ailleurs, on peut aussi avoir un cumul de ces problèmes, et chaque tir de charges montrent un nouveau problème&#8230;</p>
<p style="">Mais quand tout est bien réglé, c&#8217;est à dire que l&#8217;ensemble des composants de la solution est bien paramétré, avec de la logique, et bien le tir de charges se passe à merveille !</p>
<p style=""> ./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2007/12/21/tir-de-charges-quand-les-problemes-ne-viennent-pas-du-serveur-dapplications-56.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
