{"id":53,"date":"2007-12-01T12:54:53","date_gmt":"2007-12-01T12:54:53","guid":{"rendered":"http:\/\/blog.milamberspace.net\/index.php\/jmeter-superviser-un-serveur-tomcat"},"modified":"2012-08-01T08:12:16","modified_gmt":"2012-08-01T07:12:16","slug":"jmeter-superviser-un-serveur-tomcat","status":"publish","type":"page","link":"https:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\/jmeter-superviser-un-serveur-tomcat","title":{"rendered":"JMeter &#8211; Superviser un serveur Tomcat"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><strong>[Nouveaut\u00e9 du 07\/08\/2011, voir ce billet : <span style=\"color: #0000ff;\"><a title=\"Utiliser JMeter pour superviser un serveur Tomcat\" href=\"http:\/\/blog.milamberspace.net\/index.php\/2011\/08\/07\/utiliser-jmeter-pour-superviser-un-serveur-tomcat-945.html\"><span style=\"color: #0000ff;\">nouvelle version de ce tutoriel avec JMeter 2.5 et Tomcat 7<\/span><\/a><\/span>]<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Dans les tutoriels JMeter pr\u00e9c\u00e9dents, nous avons vu que JMeter est un bon outil pour effectuer des tirs de charge. JMeter sait faire d&rsquo;autres choses.<\/p>\n<p>Je vous propose de voir comment on peut utiliser JMeter pour superviser un Tomcat dans sa version 5.5.<\/p>\n<p>Pour cela, nous allons suivre le mode d&#8217;emploi disponible depuis le site de documentation JMeter :<br \/>\n<a href=\"http:\/\/jakarta.apache.org\/jmeter\/usermanual\/build-monitor-test-plan.html\">http:\/\/jakarta.apache.org\/jmeter\/usermanual\/build-monitor-test-plan.html <\/a><\/p>\n<p><em>Mais avec quelques l\u00e9g\u00e8res adaptations.<\/em><\/p>\n<p>Le pr\u00e9-requis est bien entendu d&rsquo;avoir install\u00e9 un serveur Tomcat (sous Unix\/Linux ou Windows) avec un Java JDK.<\/p>\n<p>\u00c9diter le fichier de configuration des utilisateurs :<\/p>\n<pre>[\/opt\/tomcat\/conf]# vi tomcat-users.xml<\/pre>\n<p>Le fichier ressemble \u00e0 cela :<\/p>\n<pre>&lt;?xml version='1.0' encoding='utf-8'?&gt;\r\n&lt;tomcat-users&gt; &lt;role rolename=\"tomcat\"\/&gt;\r\n&lt;role rolename=\"role1\"\/&gt;\r\n&lt;user username=\"both\" password=\"tomcat\" roles=\"tomcat,role1\"\/&gt;\r\n&lt;user username=\"tomcat\" password=\"tomcat\" roles=\"tomcat\"\/&gt;\r\n&lt;user username=\"role1\" password=\"tomcat\" roles=\"role1\"\/&gt;\r\n&lt;\/tomcat-users&gt;<\/pre>\n<p>Le modifier pour avoir :<\/p>\n<pre>&lt;?xml version='1.0' encoding='utf-8'?&gt;\r\n&lt;tomcat-users&gt;\r\n&lt;role rolename=\"manager\"\/&gt;\r\n&lt;role rolename=\"tomcat\"\/&gt;\r\n&lt;role rolename=\"admin\"\/&gt;\r\n&lt;role rolename=\"role1\"\/&gt;\r\n&lt;user username=\"both\" password=\"tomcat\" roles=\"tomcat,role1\"\/&gt;\r\n&lt;user username=\"tomcat\" password=\"tomcat!!\" roles=\"tomcat,admin,manager\"\/&gt;\r\n&lt;user username=\"role1\" password=\"tomcat\" roles=\"role1\"\/&gt;\r\n&lt;\/tomcat-users&gt;<\/pre>\n<p>V\u00e9rifions que la supervision Tomcat fonctionne, pour cela on d\u00e9marre son serveur Tomcat, et avec un navigateur, on saisie l&rsquo;URL :<br \/>\n<a href=\"#\">http:\/\/svr-tomcat:8080\/manager\/status<\/a><\/p>\n<p style=\"text-align: center;\">Une fen\u00eatre de saisie de login \/ mot de passe appara\u00eet :<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 0pt none;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/01-tomcat-manager-application-login.gif\" alt=\"Une fen\u00eatre de saisie de login \/ mot de passe apparait\" width=\"683\" height=\"259\" border=\"0\" \/><\/p>\n<p>Ensuite, le navigateur fait appara\u00eetre le statut d&rsquo;ex\u00e9cution de Tomcat :<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 0pt none;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/02-tomcat-manager-application-status.gif\" alt=\"statut d'ex\u00e9cution de Tomcat\" width=\"700\" height=\"1108\" border=\"0\" \/><br \/>\n<em>Bon, tout est OK<\/em>. Passons au param\u00e9trage de JMeter.<\/p>\n<p>Apr\u00e8s avoir d\u00e9marr\u00e9 JMeter, on commence par ajouter un <strong>Thread Group<\/strong> au niveau du <strong>Test Plan<\/strong>.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/03-jmeter-tomcat-monitor-application.gif\" alt=\"Ajout d'un Thread Group\" width=\"463\" height=\"110\" border=\"1\" \/><\/p>\n<p>Dans la configuration du <strong>Thread Group<\/strong>, on choisira le <strong>Loop Count<\/strong> \u00e0 <strong>Forever <\/strong>(en cochant la case) afin d&rsquo;avoir un outil de monitoring qui s&rsquo;arr\u00eate seulement quand l&rsquo;op\u00e9rateur le d\u00e9cide.<\/p>\n<p>On notera qu&rsquo;il est possible aussi d&rsquo;utiliser la programmation de fonctionnement (via <strong>Scheduler<\/strong>) afin de synchroniser la supervision du Tomcat avec par exemple l&rsquo;ex\u00e9cution d&rsquo;un tir de charge.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/03b-jmeter-tomcat-monitor-application.gif\" alt=\"Configuration du Thread Group\" width=\"356\" height=\"279\" border=\"1\" \/><\/p>\n<p>On ajoute ensuite un \u00e9l\u00e9ment<strong> HTTP Authorization Manager <\/strong>afin de g\u00e9rer l&rsquo;authentification demand\u00e9e par Tomcat pour voir le statut du serveur.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/04-jmeter-tomcat-monitor-application.gif\" alt=\"On ajoute un \u00e9l\u00e9ment HTTP Authorization Manager\" width=\"629\" height=\"334\" border=\"1\" \/><\/p>\n<p>Dans la configuration du <strong>HTTP Authorization Manager<\/strong>, on ajoutera dans :<\/p>\n<ul>\n<li><strong>le champ Usernane<\/strong> : tomcat (en fonction du param\u00e9trage du fichier tomcat-users.xml)<\/li>\n<li><strong>le champ Password<\/strong> : tomcat!! (en fonction du param\u00e9trage du fichier tomcat-users.xml)<\/li>\n<\/ul>\n<ul>\n<li>Les autres champs sont laiss\u00e9s \u00e0 vide.<\/li>\n<\/ul>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/05-jmeter-tomcat-monitor-application.gif\" alt=\"Login et Password dans l'\u00e9l\u00e9ment authorization manager\" width=\"456\" height=\"140\" border=\"1\" \/><\/p>\n<p>On continue en ajoutant un \u00e9l\u00e9ment <strong>HTTP Request <\/strong>pour effectuer la requ\u00eate HTTP permettant de demander le statut du serveur.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/06-jmeter-tomcat-monitor-application.gif\" alt=\"Ajout d'un \u00e9l\u00e9ment HTTP Request pour demander le statut du serverur\" width=\"621\" height=\"154\" border=\"1\" \/><\/p>\n<p>Dans la configuration de l&rsquo;\u00e9l\u00e9ment <strong>HTTP Request<\/strong>, on modifiera la valeur des champs suivants :<\/p>\n<ul>\n<li><strong>Name :<\/strong> Server Status<\/li>\n<li><strong>Server Name or IP :<\/strong> svr-tomcat (ou l&rsquo;adresse IP du serveur)<\/li>\n<li><strong>Port Number :<\/strong> 8080<\/li>\n<li><strong>Path :<\/strong> \/manager\/status<\/li>\n<li><strong>Send Parameters With the Request :<\/strong> ajout d&rsquo;un \u00e9l\u00e9ment<\/li>\n<li><strong>Name :<\/strong> XML et <strong>Value<\/strong> : true.<\/li>\n<li>Sans oublier \u00e0 la fin, de cocher le champ <strong>Use as Monitor<\/strong>.<\/li>\n<\/ul>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/07-jmeter-tomcat-monitor-application.gif\" alt=\"Configuration de l'\u00e9l\u00e9ment HTTP Request\" width=\"619\" height=\"580\" border=\"1\" \/><\/p>\n<p>Afin de demander le statut du serveur r\u00e9guli\u00e8rement, on ajoute un \u00e9l\u00e9ment <strong>Constant Timer<\/strong> qui laissera un intervalle de temps entre chaque demande. <em>Attention \u00e0 ne pas le mettre trop souvent car l&rsquo;appel \u00e0 cette requ\u00eate de statut consomme une unit\u00e9 d&rsquo;ex\u00e9cution sur le Tomcat.<\/em><\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/08-jmeter-tomcat-monitor-application.gif\" alt=\"Ajout d'un \u00e9l\u00e9ment Constant Timer\" width=\"576\" height=\"234\" border=\"1\" \/><\/p>\n<p>On param\u00e9tra l&rsquo;\u00e9l\u00e9ment <strong>Constant Timer <\/strong>pour une fr\u00e9quence de 5000 ms (5s) de rafraichissement des donn\u00e9es de monitoring.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/09-jmeter-tomcat-monitor-application.gif\" alt=\"Configuration du Constant Timer \u00e0 5 secondes\" width=\"459\" height=\"124\" border=\"1\" \/><\/p>\n<p>Il ne reste plus qu&rsquo;\u00e0 ajouter l&rsquo;\u00e9l\u00e9ment <strong>Monitor Results<\/strong> pour voir de mani\u00e8re graphique l&rsquo;\u00e9tat du serveur Tomcat.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/10-jmeter-tomcat-monitor-application.gif\" alt=\"Ajout d'un \u00e9l\u00e9ment Monitor Results\" width=\"555\" height=\"212\" border=\"1\" \/><\/p>\n<p>Ensuite on passe \u00e0 l&rsquo;ex\u00e9cution d&rsquo;un tir de test sur le serveur Tomcat. Pour cela, j&rsquo;ai repris le <a href=\"http:\/\/blog.milamberspace.net\/index.php\/jmeter-tir-de-charges-par-paliers-et-exploitation-des-resultats\" target=\"_blank\">tir de charges par palier<\/a>, tout en supervisant le Tomcat.<\/p>\n<p>Concernant les param\u00e8tres de JVM, j&rsquo;ai r\u00e9duit la m\u00e9moire maximum allou\u00e9e \u00e0 128 Mo afin surcharger volontairement le serveur. Dans le fichier catalina.sh (dans TOMCAT_HOME\/bin), j&rsquo;ai ajout\u00e9 la ligne suivant au d\u00e9but du fichier :<br \/>\nJAVA_OPTS=\u00a0\u00bb$JAVA_OPTS -server -Xms64M -Xmx128M\u00a0\u00bb<\/p>\n<p style=\"text-align: left;\">Voici l&rsquo;affichage de l&rsquo;\u00e9tat de sant\u00e9 du serveur Tomcat \u00e0 un instant T :<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/11-jmeter-tomcat-monitor-results.gif\" alt=\"Supervision Tomcat : Etat de sant\u00e9\" width=\"624\" height=\"525\" border=\"1\" \/><\/p>\n<p>Et voici le graphique de performance du serveur Tomcat durant le tir de charge.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/14-jmeter-tomcat-monitor-results.gif\" alt=\"Graphiques de performances du serveur Tomcat durant le tir de charges\" width=\"557\" height=\"391\" border=\"1\" \/><\/p>\n<p style=\"text-align: left;\"><em>Quelques explications du graphique :<\/em><\/p>\n<p style=\"text-align: left;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 1px solid black;\" src=\"\/wp-content\/images\/jmeter04-tomcat-img\/15-jmeter-tomcat-monitor-results-explications.gif\" alt=\"Explications du graphique de performances du serveur Tomcat durant le tir de charges\" width=\"560\" height=\"527\" border=\"1\" \/><\/p>\n<p>On retrouve donc les deux paliers (50 utilisateurs et 100 utilisateurs). La courbe des threads (unit\u00e9s d&rsquo;ex\u00e9cution) de Tomcat refl\u00e8te assez bien la charge du serveur par rapport au nombre d&rsquo;utilisateurs simul\u00e9s.<\/p>\n<p>Le serveur Tomcat commence \u00e0 \u00eatre charg\u00e9 d\u00e8s la phase de mont\u00e9e de 50 \u00e0 100 VU. Ensuite \u00e0 100 utilisateurs, Tomcat est surcharg\u00e9, le nombre d&rsquo;unit\u00e9s d&rsquo;ex\u00e9cution est au maximum r\u00e9guli\u00e8rement, la m\u00e9moire JVM encha\u00eene les passage de GC. La retomb\u00e9e subite \u00e0 50 VU redonne tout de suite la sant\u00e9 au serveur Tomcat.<\/p>\n<p>Voil\u00e0 pour ce petit tutoriel sur la supervision d&rsquo;un Tomcat 6. Bon courage.<\/p>\n<p>.\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; [Nouveaut\u00e9 du 07\/08\/2011, voir ce billet : nouvelle version de ce tutoriel avec JMeter 2.5 et Tomcat 7] &nbsp; Dans les tutoriels JMeter pr\u00e9c\u00e9dents, nous avons vu que JMeter est un bon outil pour effectuer des tirs de charge. JMeter sait faire d&rsquo;autres choses. Je vous propose de voir comment on peut utiliser JMeter &hellip; <a href=\"https:\/\/blog.milamberspace.net\/index.php\/jmeter-pages\/jmeter-superviser-un-serveur-tomcat\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">JMeter &#8211; Superviser un serveur Tomcat<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":85,"menu_order":4,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-53","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/53","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/comments?post=53"}],"version-history":[{"count":11,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/53\/revisions"}],"predecessor-version":[{"id":1195,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/53\/revisions\/1195"}],"up":[{"embeddable":true,"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/pages\/85"}],"wp:attachment":[{"href":"https:\/\/blog.milamberspace.net\/index.php\/wp-json\/wp\/v2\/media?parent=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}