<?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 - JMeter &#187; Tests de charges</title>
	<atom:link href="http://blog.milamberspace.net/index.php/tag/tests-de-charges/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.milamberspace.net</link>
	<description>Apache JMeter (surtout) mais aussi GNU/Linux, OpenSource, l&#039;Informatique, etc.</description>
	<lastBuildDate>Sun, 05 Feb 2012 09:51:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JMeter : utilisation de l&#8217;élément JDBC comme source de données pour un test de charge (partie 2)</title>
		<link>http://blog.milamberspace.net/index.php/2009/06/13/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-2-317.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/06/13/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-2-317.html#comments</comments>
		<pubDate>Sat, 13 Jun 2009 08:30:54 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=317</guid>
		<description><![CDATA[Nous revoilà dans la deuxième partie de ce tutoriel. Pour rappel, nous étions dans la mise en œuvre d&#8217;un test de charges, dont les données injectées proviennent directement d&#8217;une base de données et ont été récupérées par JMeter, le tout expliqué dans cette partie. Le schéma ci-dessous montre les deux parties. Dans les lignes suivantes, [...]]]></description>
			<content:encoded><![CDATA[<p >Nous revoilà dans la deuxième partie de ce tutoriel. Pour rappel, nous étions dans la mise en œuvre d&#8217;un test de charges, dont les données injectées proviennent directement d&#8217;une base de données et ont été récupérées par JMeter, le tout expliqué dans <a href="http://blog.milamberspace.net/index.php/2009/06/12/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-1-311.html">cette partie</a>.<span id="more-317"></span></p>
<p >Le schéma ci-dessous montre les deux parties. Dans les lignes suivantes, on s&#8217;occupera donc de la deuxième partie.</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Plan de test JMeter JDBC" src="/wp-content/images/jmeter19-img/part1/01-jmeter-jdbc.png" alt="" width="291" height="273" /></p>
<p >Tout d&#8217;abord, la deuxième partie débute par un <strong>Contrôleur Simple</strong>, puis on attache directement un élément de configuration <strong>Paramètres HTTP par défaut</strong> dans lequel on configure l&#8217;adresse du serveur à tester. Pour moi, cela sera un simple serveur Tomcat avec ses applications d&#8217;exemples. <a href="http://blog.milamberspace.net/index.php/jmeter-variabilisation-de-donnees">Ce tutoriel </a>détaille le scénario fonctionnel.</p>
<p >Ensuite vient un élément de configuration <strong>Compteur</strong><span style="font-weight: normal;">, que l&#8217;on initialise (Lancer) à 1 avec un incrément de 1. Son nom de référence sera CPT.</span></p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Compteur JMeter" src="/wp-content/images/jmeter19-img/part2/02-CS-jmeter-jdbc.png" alt="" width="312" height="224" /></p>
<p >La <strong>requête HTTP</strong> arrive ensuite. Il y a bien entendu l&#8217;URL à appeler, mais également les paramètres à envoyer dans ce formulaire pour avoir le Prénom et Nom en résultat.</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Requête HTTM JMeter" src="/wp-content/images/jmeter19-img/part2/03-CS-jmeter-jdbc.png" alt="" width="765" height="342" /></p>
<p >C&#8217;est ici, que nous allons utiliser les variables récupérées <a href="http://blog.milamberspace.net/index.php/2009/06/12/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-1-311.html">du billet précédent</a>. Pour cela nous allons utiliser une fonction JMeter bien pratique puisqu&#8217;elle va évaluer une chaîne de caractères générée en tant que nom de variable. La fonction est <a href="http://jakarta.apache.org/jmeter/usermanual/functions.html#__V">__V()</a> (deux soulignés et V)</p>
<p >Nous avons ainsi :</p>
<p ><strong>${__V(VAR_PRENOM_${CPT})}</strong></p>
<p >qui va faire pour un CPT à 1, le nom de variable VAR_PRENOM_1 (et compris comme ${VAR_PRENOM_1})</p>
<p >Et comme le compteur va s&#8217;incrémenter de 1 à chaque itération, nous allons avoir ${VAR_PRENOM_1}, ${VAR_PRENOM_2}, ${VAR_PRENOM_3}, etc.</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Assertion Réponse JMeter" src="/wp-content/images/jmeter19-img/part2/04-CS-jmeter-jdbc.png" alt="" width="364" height="328" /></p>
<p >En élément fils que la requête HTTP, on peut placer de manière optionnelle, une <strong>Assertion Réponse</strong> qui vient vérifier que l&#8217;envoi du formulaire a bien fonctionné (car l&#8217;application affiche le nom et prénom qui ont été envoyés).</p>
<p >Il ne reste plus qu&#8217;a faire une exécution (en gardant le paramétrage en 1-1-10 du groupe d&#8217;unités)</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Groupes dunités 1-1-10" src="/wp-content/images/jmeter19-img/part2/08-CS-jmeter-jdbc.png" alt="" width="407" height="280" /></p>
<p style="margin-bottom: 0cm; text-align: left;">Voici les résultats dans l&#8217;élément <strong>Arbre de résultats</strong> :</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Execution" src="/wp-content/images/jmeter19-img/part2/06-CS-jmeter-jdbc.png" alt="" width="575" height="261" /></p>
<p >Génial, cela marche ! <em>(vous en doutiez ? <img src='http://blog.milamberspace.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )</em></p>
<p >Ah mais que ce passe-t-il à partir de la septième itération ?</p>
<p style="margin-bottom: 0cm; text-align: center;"><img class="alignnone" title="Septieme exécution" src="/wp-content/images/jmeter19-img/part2/07-CS-jmeter-jdbc.png" alt="" width="570" height="281" /></p>
<p >L&#8217;explication est simple, ma requête SQL ne renvoie que 6 éléments, donc JMeter ne trouvant plus d&#8217;éléments, envoi le nom de la variable&#8230; Allez, c&#8217;est facile à régler, il suffit de mettre dans le champ Maximum du <strong>Compteur CPT</strong>, la variable suivante : <strong>${VAR_ID_#}</strong> qui, je vous le rappelle, correspond au nombre d&#8217;éléments retournés pour le champ VAR_ID. Donc ici pour nous c&#8217;est 6.</p>
<p >Ainsi lors de l&#8217;exécution, le compteur va re-boucler de 1 à 6 (min à max) indéfiniment.</p>
<p ><em>Et voilà</em>, vous avez donc maintenant un script JMeter qui attaque une table dans une base de données pour ensuite faire un test de charges avec ces données.</p>
<p ><span style="text-decoration: underline;">Une petite remarque pour la fin :</span></p>
<p >Si jamais vous voulez utiliser un plan de test similaire à celui du tutoriel pour un test de charge avec 1 million de lignes remontées par la requête SQL, il y a de forte chance pour qu&#8217;il y ait des problèmes de mémoire dans votre JMeter, car cela va faire 1 million de variables en mémoire (ouille!)</p>
<p >./</p>
<p >
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/06/13/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-2-317.html/feed</wfw:commentRss>
		<slash:comments>0</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 » [...]]]></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>
		<item>
		<title>[Tutorial] JMeter : faire un tir de charges par paliers et exploiter ses résultats avec Microsoft Access</title>
		<link>http://blog.milamberspace.net/index.php/2007/11/07/tutorial-jmeter-faire-un-tir-de-charges-par-palier-et-exploiter-ses-resultats-avec-microsoft-access-51.html</link>
		<comments>http://blog.milamberspace.net/index.php/2007/11/07/tutorial-jmeter-faire-un-tir-de-charges-par-palier-et-exploiter-ses-resultats-avec-microsoft-access-51.html#comments</comments>
		<pubDate>Wed, 07 Nov 2007 00:41:18 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Access]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tests de charges]]></category>
		<category><![CDATA[Paliers]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/index.php/2007/11/07/tutorial-jmeter-faire-un-tir-de-charges-par-palier-et-exploiter-ses-resultats-avec-microsoft-access-51.html</guid>
		<description><![CDATA[Et voilà un nouveau tutorial sur JMeter. Il s&#8217;agit cette fois d&#8217;exécuter un tir de charges avec JMeter en utilisant des paliers de charges, c&#8217;est-à-dire que pour un même scénario, on va d&#8217;abord simuler une charge de N utilisateurs pendant une certaine période, puis après une période de montée en charges, nous simulerons N x [...]]]></description>
			<content:encoded><![CDATA[<p>Et voilà un nouveau tutorial sur JMeter. Il s&#8217;agit cette fois d&#8217;exécuter un tir de charges avec JMeter en utilisant des paliers de charges, c&#8217;est-à-dire que pour un même scénario, on va d&#8217;abord simuler une charge de N utilisateurs pendant une certaine période, puis après une période de montée en charges, nous simulerons N x 2 utilisateurs.</p>
<p>L&#8217;avantage d&#8217;un scénario par paliers est de permettre d&#8217;observer le comportement d&#8217;une application pendant une période &laquo;&nbsp;normale&nbsp;&raquo; et une période de &laquo;&nbsp;stress&nbsp;&raquo;.</p>
<p>Pour mieux voir son comportement, nous allons nous aider de Microsoft Access pour exploiter les temps de réponses enregistrés pendant le tir de charges, et ainsi générer rapidement un graphique. Ce dernier permettra une meilleure analyse du comportement, et sera beaucoup plus &laquo;&nbsp;sexy&nbsp;&raquo; dans un rapport de tir de charges.</p>
<p>Prêt à partir pour de nouvelles aventures JMeter ? Oui, alors <a href="http://blog.milamberspace.net/index.php/jmeter-tir-de-charges-par-paliers-et-exploitation-des-resultats">Go sur cette page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2007/11/07/tutorial-jmeter-faire-un-tir-de-charges-par-palier-et-exploiter-ses-resultats-avec-microsoft-access-51.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

