<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Sébastien Bovo [Microsoft France]  : IIS</title><link>http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx</link><description>Tags: IIS</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Plan d‘action pour la capture des informations lors d’un problème de production IIS</title><link>http://blogs.msdn.com/sbovo/archive/2009/05/13/plandactioncapturedumpslogsretablissementiis.aspx</link><pubDate>Wed, 13 May 2009 17:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9590854</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9590854.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9590854</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9590854</wfw:comment><description>&lt;p&gt;Je fais suite à mon précédent billet sur &lt;a title="Billet précédent : Déboguer une application en production... Mais pour quoi faire ?" href="http://blogs.msdn.com/sbovo/archive/2009/05/05/debogueruneapplicationenproductionmaispourquoifaire.aspx" target="_blank"&gt;l’introduction sur le débogage en production&lt;/a&gt; afin de vous donner plus de précisions sur la collecte d’informations lors de l’apparition d’un problème en production.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Dans tous les cas se présentant à vous, je vous conseille de récupérer des serveurs Web les logs IIS, les logs HTTPErr et vos logs applicatifs. Vous trouverez les explications dans le billet &lt;a title="Billet précédent : Données à récolter pour un travail de surveillance ou d&amp;#39;investigation sur un serveur Web" href="http://blogs.msdn.com/sbovo/archive/2008/11/26/donneesARecolterPpourUnTravailDeSurveillanceOouDInvestigationSurUnServeurWeb.aspx" target="_blank"&gt;Données à récolter pour un travail de surveillance ou d'investigation sur un serveur Web&lt;/a&gt;. Ces logs nous permettent de vérifier la charge utilisateur, les temps de réponses, les erreurs HTTP : ce sont des informations précieuses à relier avec le comportement observé de l’application. Aussi, si vous avez la possibilité de &lt;a title="Billet précédent : Performances de vos applications ASP.NET - Quels compteurs étudier ?" href="http://blogs.msdn.com/sbovo/archive/2008/10/31/PerformancesApplicationsASPNETQuelsCompteurs.aspx" target="_blank"&gt;prendre un log Perfmon&lt;/a&gt;, cela constitue un apport d’informations supplémentaires.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;D’un point de vue système, je résumerais les problématiques de production en deux comportements distincts :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;font color="#804000"&gt;Hang&lt;/font&gt; &lt;/strong&gt;=&amp;#160; Etat de blocage &amp;quot;deadlock&amp;quot; (avec ou sans 100% CPU) ou d’attente &amp;quot;hang&amp;quot; du processus &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;font color="#804000"&gt;Crash&lt;/font&gt;&lt;/strong&gt; = Arrêt &amp;quot;crash&amp;quot; du processus &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;La prise de dumps peut se faire par le script Adplus. Voici comment faire : &lt;a title="Billet précédent : Procédures de prises de dumps pour un serveur Web" href="http://blogs.msdn.com/sbovo/archive/2008/11/25/proceduresDePrisesDeDumpsPourUnServeurWeb.aspx" target="_blank"&gt;Procédures de prises de dumps pour un serveur Web&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;D’une manière générale, vous pouvez utiliser Adplus pour les prises de dumps/logs pour tous les processus et pas pour IIS seulement. Les paramètres les plus utiles sont :&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="542"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="49"&gt;-p&lt;/td&gt;        &lt;td valign="top" width="30"&gt;–&amp;gt;&lt;/td&gt;        &lt;td valign="top" width="461"&gt;Spécifie le PID du processus&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="49"&gt;-pn&lt;/td&gt;        &lt;td valign="top" width="30"&gt;–&amp;gt;&lt;/td&gt;        &lt;td valign="top" width="461"&gt;Donne le nom du processus (plutôt que son PID)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="49"&gt;-o&lt;/td&gt;        &lt;td valign="top" width="30"&gt;–&amp;gt;&lt;/td&gt;        &lt;td valign="top" width="461"&gt;Renseigne le répertoire de sortie pour la création du dumps&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Ainsi, pour une prise de dumps de plusieurs processus et la création des dumps dans un répertoire particulier, la commande ressemble à&lt;/p&gt;  &lt;p&gt;   &lt;table&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;             &lt;p&gt;cscript.exe adplus.vbs -pn w3wp.exe -pn inetinfo.exe -crash -o c:\temp -quiet&lt;/p&gt;           &lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;Deux autres paramètres sont utiles :&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="542"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="135"&gt;-NoDumpOnFirst &lt;/td&gt;        &lt;td valign="top" width="30"&gt;–&amp;gt;&lt;/td&gt;        &lt;td valign="top" width="371"&gt;Permet de ne pas surcharger le débogueur (et donc le serveur) qui prend un mini dump pour chaque exception de première chance. Logue toutes les exceptions levées&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="135"&gt;-NoDumpOnSecond &lt;/td&gt;        &lt;td valign="top" width="30"&gt;–&amp;gt;&lt;/td&gt;        &lt;td valign="top" width="371"&gt;Aucune prise de dump mais seulement le remplissage d’un log permettant de visualiser toutes les exceptions levées&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Pour vous donner plus de précisions, en deux mots, il existe deux types d'exceptions : première chance et seconde chance.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Une exception de première chance&lt;/strong&gt; peut être interceptée par votre application par un try/catch ou un gestionnaire d’exceptions global &lt;/li&gt;    &lt;li&gt;Si cette exception n’est pas gérée, elle est à nouveau levée mais comme &lt;strong&gt;une exception de seconde chance&lt;/strong&gt;. Dans ce cas, seul un débogueur peut l’intercepter et si aucun débogueur n’est attaché, l’application se ferme (autrement dit : le processus crashe). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Par exemple, pour une prise d’un dump lors du crash de l’application &amp;quot;WpfApplication1.exe&amp;quot;, vous pouvez utiliser &amp;quot;cscript.exe adplus.vbs -crash -pn WpfApplication1.exe -o c:\temp -quiet&amp;quot;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Plandactionpourlacapturedesinformationsl_D2E5/image_7.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Adplus.vbs" border="0" alt="Adplus.vbs" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Plandactionpourlacapturedesinformationsl_D2E5/image_thumb_2.png" width="513" height="216" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Cette commande a pour effet de brancher le débogueur &amp;quot;cdb.exe&amp;quot; au processus WpfApplication1.exe. Le debogueur logue toutes les exceptions dans un fichier pendant l’exécution du processus et si une exception de seconde chance est levée (provoquant l’arrêt du processus), un dump est pris.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Plandactionpourlacapturedesinformationsl_D2E5/image_8.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="cdb.exe" border="0" alt="cdb.exe" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Plandactionpourlacapturedesinformationsl_D2E5/image_thumb_3.png" width="511" height="260" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Le répertoire de sortie contient les fichiers suivants :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Process_List.txt&lt;/strong&gt; - Liste des processus s’éxécutant sur la machine au moment du lancement de la commande &lt;/li&gt;    &lt;li&gt;un ou plusieurs fichiers du type &lt;strong&gt;PID-2852__WPFAPPLICATION1.EXE__Date_05-13-2009__Time_15-46-0303.log&lt;/strong&gt; - Log des exceptions levées par l’application &lt;/li&gt;    &lt;li&gt;un ou plusieurs fichiers du type &lt;strong&gt;PID-2852__WPFAPPLICATION1.EXE__2nd_chance_NET_CLR__full_0a70_2009-05-13_15-46-10-421_0b24.dmp&lt;/strong&gt; - Dump du processus &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Plandactionpourlacapturedesinformationsl_D2E5/image_14.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="RepertoireSortie" border="0" alt="RepertoireSortie" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Plandactionpourlacapturedesinformationsl_D2E5/image_thumb_6.png" width="515" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A noter que le répertoire et les fichiers contiennent la date et l’heure exacte de la prise de dumps. Dans l’exemple précédent, il s’agit du 2009-05-13 pour le 13 mai et 15-46-10 pour 15h46m.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nous avons donc maintenant toutes les données nécessaires (en particulier les dumps) pour déboguer à tête reposée. Ouvrons le dump avec Windbg :-)&lt;/p&gt;  &lt;p&gt;Sebastien.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;gt;&amp;gt;&amp;gt; Suite : &lt;a title="Premiers pas avec WinDbg" href="http://blogs.msdn.com/sbovo/archive/2009/06/19/premierpasavecwindbg.aspx"&gt;Premiers pas avec WinDbg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9590854" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/Debogage/default.aspx">Debogage</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Gestion des versions des assemblies du GAC par ASP.NET</title><link>http://blogs.msdn.com/sbovo/archive/2009/04/30/gestiondesversionsdllgacasp-net.aspx</link><pubDate>Thu, 30 Apr 2009 09:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9562327</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9562327.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9562327</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9562327</wfw:comment><description>&lt;p&gt;Le GAC nous permet de partager des assemblies entre plusieurs applications ASP.NET. La gestion des versions des ces assemblies en est aussi facilitée à condition de bien comprendre la différence entre &lt;strong&gt;Assembly version &lt;/strong&gt;et &lt;strong&gt;File version&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Allez hop... Petite explication !&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Lors de la mise à jour d’une assembly nous avons le choix entre changer l’&lt;strong&gt;Assembly version&lt;/strong&gt; et la &lt;strong&gt;File version&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/GestionDesVersionsDllGACASP.NET_E3C7/image_2.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ProprieteProjet" border="0" alt="ProprieteProjet" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/GestionDesVersionsDllGACASP.NET_E3C7/image_thumb.png" width="520" height="249" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/GestionDesVersionsDllGACASP.NET_E3C7/image_4.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Versions" border="0" alt="Versions" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/GestionDesVersionsDllGACASP.NET_E3C7/image_thumb_1.png" width="308" height="305" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pour illustrer les deux possibilités, prenons l’exemple de plusieurs sites Web utilisant une même assembly dans le GAC (Assembly V1.0.0.0 / File V1.0.0.0). Les Web.config des applications ASP.NET utilisent :&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Assemblies" border="0" alt="Assemblies" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/GestionDesVersionsDllGACASP.NET_E3C7/image_7.png" width="330" height="107" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Possibilité 1 : Modification mineure = Correctif&lt;/h3&gt;  &lt;p&gt;&lt;em&gt;Nous mettons à jour cette assembly dans la GAC en gardant la même Assembly version mais en changeant la File version (Assembly V1.0.0.0 / &lt;b&gt;&lt;font color="#ff0000"&gt;File V1.1.0.0&lt;/font&gt;&lt;/b&gt;) &lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Dans la GAC, nous avons maintenant seulement la nouvelle assembly (Assembly V1.0.0.0 / File V1.1.0.0). Cette nouvelle assembly remplace la précédente car nous avons la même Assembly version. En effet, dans la GAC, deux assemblies du même nom ne peuvent pas avoir la même Assembly version &lt;/li&gt;    &lt;li&gt;Les applications en cours d’exécution utilisent toujours la version précédente (Assembly V1.0.0.0 / File V1.0.0.0) car pour elles rien ne leur indique un changement (le web.config n’a pas changé) &lt;/li&gt;    &lt;li&gt;Si l’appDomain redémarre : c'est-à-dire si l’application Web redémarre suite à une modification du Web.config par exemple, la nouvelle version n’est toujours pas chargée car l’ancienne est en mémoire dans le processus W3WP.EXE qui n’a pas redémarré &lt;/li&gt;    &lt;li&gt;Si le processus W3WP.EXE redémarre suite à un recyclage, un crash, alors la CLR va chercher dans le GAC la dll et prend la nouvelle version &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Possibilité 2 : Modification majeure = Nouvelle version&lt;/h3&gt;  &lt;p&gt;&lt;em&gt;Nous mettons à jour cette assembly dans la GAC en changeant le numéro de l’Assembly version (&lt;b&gt;&lt;font color="#ff0000"&gt;Assembly V2.0.0.0&lt;/font&gt;&lt;/b&gt;)&lt;/em&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Dans la GAC, nous voyons maintenant les deux assemblies &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="GAC" border="0" alt="GAC" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/GestionDesVersionsDllGACASP.NET_E3C7/clip_image002_3.jpg" width="414" height="129" /&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Les applications en cours d’exécution utiliseront toujours l’Assembly version 1.0.0.0 tant que le web.config n’est pas modifié pour mentionner le changement de version : &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="AssemblyVersion" border="0" alt="AssemblyVersion" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/GestionDesVersionsDllGACASP.NET_E3C7/image_10.png" width="328" height="105" /&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Comme modifions le Web.config, l’appDomain redémarre (sans redémarrage du processus W3WP.EXE) et prend en charge la nouvelle version &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Conclusion en images :-)&lt;/p&gt;  &lt;p&gt;   &lt;table style="border-bottom-color: black; border-top-color: black; border-right-color: black; border-left-color: black" border="0" cellspacing="0" cellpadding="0" width="460"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td style="background-color: black; color: white" colspan="2"&gt;Changement File version &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="190"&gt;Redémarrage W3WP.EXE&lt;/td&gt;          &lt;td style="background-color: #339966; color: white" valign="top" width="270"&gt;Prise en compte de la nouvelle version&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="190"&gt;Modification Web.config            &lt;br /&gt;&lt;/td&gt;          &lt;td style="background-color: #cc0000; color: white" valign="top" width="270"&gt;Aucun changement&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;table style="border-bottom-color: black; border-top-color: black; border-right-color: black; border-left-color: black" border="0" cellspacing="0" cellpadding="0" width="460"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="background-color: black; color: white" colspan="2"&gt;Changement Assembly version &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="190"&gt;Redémarrage W3WP.EXE&lt;/td&gt;        &lt;td style="background-color: #cc0000; color: white" valign="top" width="270"&gt;Aucun changement&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="190"&gt;Modification Web.config&lt;/td&gt;        &lt;td style="background-color: #339966; color: white" valign="top" width="270"&gt;Prise en compte de la nouvelle version&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;J’espère que ces éclaircissements vous aideront dans vos déploiements en production. A bientôt,&lt;/p&gt;  &lt;p&gt;Sebastien.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9562327" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Utilisez TinyGet pour effectuer rapidement une charge simple sur un serveur Web</title><link>http://blogs.msdn.com/sbovo/archive/2009/04/10/utiliseztinygetpoureffectuerrapidementunechargesimplesurunserveurweb.aspx</link><pubDate>Fri, 10 Apr 2009 12:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9535860</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9535860.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9535860</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9535860</wfw:comment><description>&lt;p&gt;L’outil &lt;strong&gt;TinyGet&lt;/strong&gt; n’a pas vocation remplacer un outil de test de charge blogs.mais il s’avère extrêmement pratique dans certains cas : Je vous conseille de le garder dans vos outils favoris. Il vous permettra de simuler une charge basique sur une application Web en quelques lignes de commandes.&lt;/p&gt;  &lt;p&gt;Les avantages sont les suivants :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Support du multithread pour effectuer des requêtes simultanées &lt;/li&gt;    &lt;li&gt;Support des itérations &lt;/li&gt;    &lt;li&gt;Paramétrage possible pour le type authentification, la version HTTP, les headers, le contenu de la requête, l’utilisation d’un certificat client &lt;/li&gt;    &lt;li&gt;Attente d’un contenu particulier pour la réponse, le code de retour&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Exemple de trois threads simultanés effectuant dix requêtes chacun&lt;/h3&gt;  &lt;p&gt;   &lt;table&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;             &lt;p&gt;tinyget.exe -srv:sbovo02 -uri:/default.aspx -status:200 -threads:3 -loop:10&lt;/p&gt;           &lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;-threads donne le nombre de threads lancés simultanément.&lt;/p&gt;  &lt;p&gt;-loop indique le nombre d’itérations&lt;/p&gt;  &lt;p&gt;-status représente le code de retour attendu. Si TinyGet n’obtient pas ce code, un message est affiché dans la console&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_5.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ConsoleIISRequests" border="0" alt="ConsoleIISRequests" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_thumb.png" width="534" height="294" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Exemple d’une requête attendant un contenu particulier&lt;/h3&gt;  &lt;p&gt;   &lt;table&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;             &lt;p&gt;tinyget.exe -srv:sbovo02 -uri:/contenu.aspx -testContainString:&amp;quot;Texte&amp;quot;&lt;/p&gt;           &lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;-testContainString permet de mentionner quelle chaine (contenu dans le body de la réponse) nous attendons&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_14.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TinyGetTexte" border="0" alt="TinyGetTexte" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_thumb_6.png" width="534" height="309" mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_thumb_6.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Exemple d’une requête avec l’affichage de la trace TinyGet ou les headers de la réponse&lt;/h3&gt;  &lt;p&gt;   &lt;table&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;             &lt;p&gt;tinyget.exe -srv:sbovo02 -uri:/stylesheet.css -trace&lt;/p&gt;           &lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_13.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_13.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TinyGetTrace" border="0" alt="TinyGetTrace" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_thumb_5.png" width="534" height="403" mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_thumb_5.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;table&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;             &lt;p&gt;tinyget.exe -srv:sbovo02 -uri:/stylesheet.css -headers&lt;/p&gt;           &lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_12.png" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="TinyGetHeaders" border="0" alt="TinyGetHeaders" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_thumb_4.png" width="534" height="187" mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/UtilisationdeTinyGetpoureffectuerstresse_A2C9/image_thumb_4.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Pour télécharger l’outil et l’aide associée : IIS 6.0 Resource Kit Tools - &lt;a title="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1352" href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1352" mce_href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1352"&gt;http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1352&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Je pense que vous avez bien vu l’utilité de cet outil soit pour simuler une charge soit pour vérifier les réponses d’une application Web. &lt;/p&gt;  &lt;p&gt;Bonne utilisation !&lt;/p&gt;  &lt;p&gt;Sebastien.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9535860" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/Outils/default.aspx">Outils</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Utilisation de Logparser pour les logs IIS : Status code, erreurs 404, erreurs 500, fréquentation</title><link>http://blogs.msdn.com/sbovo/archive/2009/03/16/exempleslogparsersurlogsiisStatuscode404500Frequentation.aspx</link><pubDate>Mon, 16 Mar 2009 16:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9444142</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9444142.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9444142</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9444142</wfw:comment><description>&lt;p&gt;Bonjour,&lt;/p&gt;  &lt;p&gt;Voici quelques requêtes Logparser utiles pour la surveillance d’un serveur Web.&lt;/p&gt;  &lt;p&gt;Bonne utilisation,&lt;/p&gt;  &lt;p&gt;Sebastien.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Pourcentage des codes de retour&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;StatusCode.sql&lt;/strong&gt;&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;SELECT              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sc-status as Statut,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COUNT(*) as NbRequetes,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; MUL(PROPCOUNT(*),100) as %               &lt;br /&gt;FROM               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ex\*.log               &lt;br /&gt;GROUP BY               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sc-status&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;A partir des données de sortie, vous pouvez facilement créer un graphique (cf. ci-dessous) avec un copier/coller dans Excel par exemple.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/ExemplesLogparserSurLogsIISStatusCode404_DD2C/image_9.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SatusCode" border="0" alt="SatusCode" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/ExemplesLogparserSurLogsIISStatusCode404_DD2C/image_thumb_2.png" width="478" height="349" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Erreurs 404 - Fichiers inexistants&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Url404.sql&lt;/strong&gt;&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;SELECT              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cs-uri-stem as Url,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COUNT(*) as NbRequetes               &lt;br /&gt;FROM               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ex\*.log               &lt;br /&gt;WHERE               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sc-status = 404               &lt;br /&gt;GROUP BY               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cs-uri-stem&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Ce type de requête permet d’identifier les pages/fichiers/images n’existant pas, bien qu’étant toujours référencés par des pages de l’application. Vous pouvez aussi repérer par ce biais, les urls mal orthographiées. &lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Erreurs 500 - Erreurs ASP.NET&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Url500.sql&lt;/strong&gt;&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;SELECT              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cs-uri-stem as Url,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COUNT(*) as NbRequetes               &lt;br /&gt;FROM               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ex\*.log               &lt;br /&gt;WHERE               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sc-status = 500               &lt;br /&gt;GROUP BY               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cs-uri-stem&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Le but est de pouvoir rapidement vérifier si une url/page est la source d’une grande partie des erreurs du site Web.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Url500Completes.sql&lt;/strong&gt;&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;SELECT              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cs-method as Methode,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UrlComplete,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sc-substatus as SousStatut,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sc-win32-status as Win32Statut               &lt;br /&gt;USING               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; STRCAT(cs-uri-stem,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; REPLACE_IF_NOT_NULL(cs-uri-query, STRCAT('?', cs-uri-query))) as UrlComplete               &lt;br /&gt;FROM               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ex\*.log&amp;#160; &lt;br /&gt;WHERE               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sc-status = 500&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;En ajoutant, les informations sur le verbe HTTP et la querystring, il est possible de commencer les investigations. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Fréquentation - Nombre de requêtes par heure&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;NbRequetesParHeure.sql&lt;/strong&gt;&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;SELECT              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TO_LOCALTIME(QUANTIZE(time,3600)) AS Heure,               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COUNT(*) AS NbRequetes               &lt;br /&gt;FROM               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ex\*.log               &lt;br /&gt;GROUP BY               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Heure               &lt;br /&gt;ORDER BY               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Heure ASC&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Cette requête est intéressante car elle utilise la fonction &amp;quot;QUANTIZE&amp;quot; qui permet dans ce cas, de regrouper tous les accès par tranches de 3600s (1h). Cela nous permet de visualiser l’évolution de la fréquentation du site Web.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/ExemplesLogparserSurLogsIISStatusCode404_DD2C/image_11.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="FrenquentationTXT" border="0" alt="FrenquentationTXT" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/ExemplesLogparserSurLogsIISStatusCode404_DD2C/image_thumb_4.png" width="329" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/ExemplesLogparserSurLogsIISStatusCode404_DD2C/image_13.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="FrenquentationGraphique" border="0" alt="FrenquentationGraphique" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/ExemplesLogparserSurLogsIISStatusCode404_DD2C/image_thumb_5.png" width="472" height="431" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Comme décrit dans mon &lt;a href="http://blogs.msdn.com/sbovo/archive/2009/01/13/analysedesfichiersdelogsaveclogparser.aspx" target="_blank"&gt;précédent post&lt;/a&gt;, pour utiliser ces requêtes, il vous suffit de lancer le fichier &amp;quot;LancerLogParserSurLogsIIS.cmd&amp;quot; avec le nom du fichier .sql en entrée et le nom du fichier .txt en sortie. Par exemple :&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;LancerLogParserSurLogsIIS.cmd Url404.sql Url404.txt&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Pour rappel, le fichier LancerLogParserSurLogsIIS.cmd est :&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;Logparser.exe file:%1 -i:IISW3C -o:TSV &amp;gt; %2&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9444142" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/Outils/default.aspx">Outils</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Analyse des fichiers de logs avec LogParser</title><link>http://blogs.msdn.com/sbovo/archive/2009/01/13/analysedesfichiersdelogsaveclogparser.aspx</link><pubDate>Tue, 13 Jan 2009 16:53:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9249739</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9249739.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9249739</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9249739</wfw:comment><description>&lt;p&gt;Bonjour &amp;#224; tous,&lt;/p&gt;  &lt;p&gt;Savez-vous que Microsoft fournit un outil tr&amp;#232;s puissant pour traiter tous les fichiers logs, m&amp;#234;me les siens :-) ?&lt;/p&gt;  &lt;p&gt;Cette outil s&amp;#8217;appelle &amp;quot;&lt;strong&gt;LogParser&lt;/strong&gt;&amp;quot; et se pr&amp;#233;sente sous deux formes :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Un ex&amp;#233;cutable (x1) utilisable (x2) et automatisable (x3) en ligne de commandes &lt;/li&gt;    &lt;li&gt;Une dll COM que l&amp;#8217;on peut r&amp;#233;f&amp;#233;rencer dans nos projets pour d&amp;#233;velopper une solution profitant des fonctionnalit&amp;#233;s de l&amp;#8217;outil &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Les possibilit&amp;#233;s et les sc&amp;#233;narios d&amp;#8217;utilisation sont vraiment nombreux. En plus, l&amp;#8217;outil est impressionnant de rapidit&amp;#233; !&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/AnalyseDesFichiersDeLogsAvecLogParser_A902/LogParser_2.jpg"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En deux mots, le moteur de LogParser prend en entr&amp;#233;e plusieurs formats comme les fichiers texte, les journaux d&amp;#8217;&amp;#233;v&amp;#232;nements, ou bien directement le syst&amp;#232;me de fichiers ou encore l&amp;#8217;active Directory. Concernant les fichiers plats, il n'y a pas de restriction : les fichiers de logs avec les s&amp;#233;parateurs habituels (point virgule, virgule, tabulation, etc...) sont pris en charge.&lt;/p&gt;  &lt;p&gt;Nous manipulons dans la requ&amp;#234;te directement le nom des champs (par exemple : &amp;quot;sc-status&amp;quot;, &amp;quot;time-taken&amp;quot;, etc...).&lt;/p&gt;  &lt;p&gt;Le moteur de LogParser permet d&amp;#8217;&amp;#233;x&amp;#233;cuter une requ&amp;#234;te de type SQL pour filtrer, ordonner, consolider les donn&amp;#233;es et en sortir les r&amp;#233;sultats sous diff&amp;#233;rentes formes. Il est m&amp;#234;me possible de faire directement l'insertion des donn&amp;#233;es dans une base SQL Server ou de g&amp;#233;n&amp;#233;rer des graphiques.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a target="_blank" href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/AnalyseDesFichiersDeLogsAvecLogParser_A902/LogParser_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="MoteurLogParser" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/AnalyseDesFichiersDeLogsAvecLogParser_A902/LogParser_thumb.jpg" width="482" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pour simplifier l'utilisation de l'outil en ligne de commande, vous pouvez cr&amp;#233;er un fichier cmd prenant en entr&amp;#233;e le fichier contenant le requ&amp;#234;te SQL et le nom du fichier de sortie :&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;LancerLogParserSurLogsIIS.cmd&lt;/strong&gt;&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;Logparser.exe file:%1 -i:IISW3C -o:TSV &amp;gt; %2&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;En exemple, voici une requ&amp;#234;te donnant les moyennes du temps total d'ex&amp;#233;cution des requ&amp;#234;tes faites sur un site Web :&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;TempsExecutionMoyen.sql&lt;/strong&gt;&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;SELECT AVG(time-taken) as TempsExecutionMoyen, COUNT(*) as PourNbRequetes, cs-uri-stem as Url              &lt;br /&gt;FROM ex\*.log               &lt;br /&gt;WHERE               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; (cs-uri-stem not like '%.gif')               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; and (cs-uri-stem not like '%.css')               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; and (cs-uri-stem not like '%.js')               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; and (cs-uri-stem not like '%.jpg')               &lt;br /&gt;GROUP BY               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Url               &lt;br /&gt;ORDER BY               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TempsExecutionMoyen DESC&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Il suffit ensuite de lancer le fichier cmd :&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;LancerLogParserSurLogsIIS.cmd TempsExecutionMoyen.sql TempsExecutionMoyen.txt&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Le r&amp;#233;sultat est sous la forme suivante (fichier avec s&amp;#233;paration par tabulation) :&lt;/p&gt;  &lt;table&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="border-bottom: 1px dotted; border-left: 1px dotted; border-top: 1px dotted; border-right: 1px dotted" bgcolor="#e1eaff" bordercolor="#000080"&gt;&lt;font face="Courier New"&gt;           &lt;p&gt;TempsExecutionMoyen&amp;#160;&amp;#160;&amp;#160; PourNbRequetes&amp;#160;&amp;#160;&amp;#160; Url              &lt;br /&gt;67843&amp;#160;&amp;#160;&amp;#160; 8&amp;#160;&amp;#160;&amp;#160; /monapp/AllProducts.aspx               &lt;br /&gt;5532&amp;#160;&amp;#160;&amp;#160; 9&amp;#160;&amp;#160;&amp;#160; /monapp/CreateAccount.aspx               &lt;br /&gt;5525&amp;#160;&amp;#160;&amp;#160; 3&amp;#160;&amp;#160;&amp;#160; /monapp/FeaturedProducts.aspx               &lt;br /&gt;5062&amp;#160;&amp;#160;&amp;#160; 8&amp;#160;&amp;#160;&amp;#160; /monapp/CompanyInformation.aspx               &lt;br /&gt;2261&amp;#160;&amp;#160;&amp;#160; 4&amp;#160;&amp;#160;&amp;#160; /monapp/Links.aspx               &lt;br /&gt;305&amp;#160;&amp;#160;&amp;#160; 28&amp;#160;&amp;#160;&amp;#160; /monapp/ProductInfo.aspx               &lt;br /&gt;156&amp;#160;&amp;#160;&amp;#160; 1&amp;#160;&amp;#160;&amp;#160; /monapp/               &lt;br /&gt;61&amp;#160;&amp;#160;&amp;#160; 9&amp;#160;&amp;#160;&amp;#160; /monapp/Reviews.aspx               &lt;br /&gt;56&amp;#160;&amp;#160;&amp;#160; 5&amp;#160;&amp;#160;&amp;#160; /monapp/News.aspx               &lt;br /&gt;0&amp;#160;&amp;#160;&amp;#160; 4&amp;#160;&amp;#160;&amp;#160; /monapp/Default.htm &lt;/p&gt;            &lt;p&gt;Statistics:              &lt;br /&gt;-----------               &lt;br /&gt;Elements processed: 203               &lt;br /&gt;Elements output:&amp;#160;&amp;#160;&amp;#160; 10               &lt;br /&gt;Execution time:&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0.01 seconds &lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Le plus int&amp;#233;ressant est que ce fichier peut &amp;#234;tre directement ouvert dans Excel afin de pouvoir profiter du filtre automatique, de la cr&amp;#233;ation de graphiques : L'analyse en devient presque facile !&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a target="_blank" href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/AnalyseDesFichiersDeLogsAvecLogParser_A902/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="LogParserDansExcel" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/AnalyseDesFichiersDeLogsAvecLogParser_A902/image_thumb_2.png" width="537" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;L'outil est disponible &amp;#224; l'adresse suivante - &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A utiliser sans mod&amp;#233;ration :-)&lt;/p&gt;  &lt;p&gt;Sebastien.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9249739" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/Outils/default.aspx">Outils</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Paramétrages initiaux des pools d'applications IIS6</title><link>http://blogs.msdn.com/sbovo/archive/2008/12/02/ParametragesInitiauxDesPoolsDApplicationsIIS6.aspx</link><pubDate>Tue, 02 Dec 2008 14:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9128180</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9128180.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9128180</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9128180</wfw:comment><description>&lt;P&gt;Voici quelques recommandations/explications qui pourront vous aider lors du paramétrage initial (manuel ou automatisé) de vos pools d'applications ASP.NET sur vos serveurs IIS6.&lt;/P&gt;
&lt;H4&gt;&lt;A title=_Toc207528863 name=_Toc207528863&gt;&lt;/A&gt;&lt;B&gt;Pool d'applications et worker process&lt;/B&gt;&lt;/H4&gt;
&lt;P&gt;Un pool d’application correspond à un processus W3WP.EXE (ou plusieurs, si WebGarden est différent de&amp;nbsp; 1). Il est possible de n’avoir qu’une seule version du .NET Framework chargée dans un processus.&lt;/P&gt;
&lt;P&gt;Dans le cas où vous auriez plusieurs applications ou plusieurs sites Web,&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Vous devez faire attention à ce que les sites Web/répertoires virtuels qui sont affectés à un pool d’applications, utilisent la même version du .NET Framework &lt;/LI&gt;
&lt;LI&gt;De plus, afin de faire une séparation des applications en plusieurs pools d’applications, vous devez tenir compte : 
&lt;UL&gt;
&lt;LI&gt;De la mémoire physique totale du serveur. En effet, chaque processus peut utiliser jusqu'à 1Go-1,5Go de mémoire virtuelle (rarement plus à cause de la fragmentation mémoire même si la limite théorique est de 2Go)&lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;Du nombre d’applications et de leur empreinte mémoire respectives&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Des résultats des tests de charge. En effet, si d’après les tests vous vous apercevez qu’une application consomme beaucoup de mémoire ou crashe régulièrement, cela fait sens de l’isoler dans un pool d’applications afin d’investiguer&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;H4&gt;&lt;A title=_Toc207528864 name=_Toc207528864&gt;&lt;/A&gt;&lt;B&gt;Paramètres des pools d'applications&lt;/B&gt;&lt;/H4&gt;
&lt;P&gt;Premier point : il est conseillé d’enlever l’option « Recycle worker processes (in minutes) ». En effet, ce paramètre n’est pas adapté à la production dans la mesure où le recyclage peut se faire à n’importe quel moment de la journée.&lt;/P&gt;
&lt;P&gt;Par contre, si vous le jugez utile, vous pouvez planifier un recyclage journalier pendant un une plage horaire où l’application n’est pas utilisée. Cela permet de relancer un nouveau processus W3WP.EXE et de repartir à zéro concernant la charge mémoire. Par contre, lors de la première connexion du premier utilisateur de la journée, l’application se chargera dans le W3WP.EXE. Ce chargement sera sensible au niveau des performances. Il est possible de ne pas subir cette baisse de performances au démarrage de l’application en simulant plusieurs accès au site Web (par un outil, par script) avant que le premier utilisateur se connecte. Je vous conseille aussi d'utiliser la &lt;A title="précompilation ASP.NET" target=_blank href="http://msdn.microsoft.com/en-us/library/399f057w(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/399f057w(VS.85).aspx"&gt;précompilation ASP.NET&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Si une application possède une fuite mémoire, vous pouvez l’isoler dans un pool d’applications. Il est possible d’utiliser les options de « Memory recycling » ou un recyclage planifié toutes les nuits. Sachez que lorsqu’il y a un recyclage et que si l’application utilise le mode de session dit « InProc » (dans le Web.config), vous perdez les variables de l'application et de sessions.&lt;/P&gt;
&lt;P&gt;Le recyclage par seuil de mémoire peut se faire en fonction de :&lt;/P&gt;
&lt;P&gt;- « Maximum used memory » ce qui correspond à la taille réelle du processus en mémoire&lt;/P&gt;
&lt;P&gt;Ou&lt;/P&gt;
&lt;P&gt;- « Maximum virtual memory » ce qui correspond à la taille de la mémoire virtuelle adressée par le processus&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=Recycling src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Recommendationsdeparamtragesinitiauxpour_992C/clip_image002_3.jpg" width=465 height=439 mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Recommendationsdeparamtragesinitiauxpour_992C/clip_image002_3.jpg"&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Le champ « Idle timeout » donne le nombre de minutes, après le dernier accès à l’application, au bout duquel le W3WP.EXE se décharge de la mémoire. Le but est d’économiser les ressources du serveur lorsque celui-ci n’est pas utilisé.&lt;/P&gt;
&lt;P&gt;Le champ « Request queue limit » correspond à la taille de la file d’attente kernel utilisée pour les requêtes http entrantes destinées aux applications exécutées dans le pool d’applications.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=Performance src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Recommendationsdeparamtragesinitiauxpour_992C/clip_image004_3.jpg" width=465 height=439 mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Recommendationsdeparamtragesinitiauxpour_992C/clip_image004_3.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Le champ « Enable pinging » indique le nombre de secondes entre chaque vérification de présence/bon fonctionnement du W3WP.EXE. Dans le cas où le processus ne répond pas, IIS en redémarre un nouveau afin de garantir la disponibilité du serveur Web.&lt;/P&gt;
&lt;P&gt;Le champ « Enable rapid-fail protection » est le mécanisme inverse : si l’application est dangereuse pour la santé du serveur, le pool d’application est désactivé. Une action de l’administrateur est nécessaire pour le réactiver.&lt;/P&gt;
&lt;P&gt;« Startup time limit » et « Shutdown time limit » correspondent au temps maximum que nous donnons à IIS pour, respectivement, démarrer/arrêter le W3WP.EXE. Si le processus ne démarre pas ou ne s’arrête pas dans le temps imparti. IIS fait un nouvel essai de démarrage/arrêt avec un nouveau processus.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=Health src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Recommendationsdeparamtragesinitiauxpour_992C/clip_image006_3.jpg" width=465 height=439 mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/Recommendationsdeparamtragesinitiauxpour_992C/clip_image006_3.jpg"&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9128180" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Données à récolter pour un travail de surveillance ou d'investigation sur un serveur Web</title><link>http://blogs.msdn.com/sbovo/archive/2008/11/26/donneesARecolterPpourUnTravailDeSurveillanceOouDInvestigationSurUnServeurWeb.aspx</link><pubDate>Wed, 26 Nov 2008 10:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9128171</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9128171.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9128171</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9128171</wfw:comment><description>&lt;P&gt;Afin de commencer un travail d’investigation sur le fonctionnement d’une application Web (erreurs, crashes, performance, fuites mémoire), les données les intéressantes à récupérer d’un serveur Web sont&amp;nbsp;:&lt;/P&gt;
&lt;P&gt;- &lt;B&gt;Logs IIS&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;- &lt;B&gt;Logs HTTPERR&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;- &lt;B&gt;Journaux d’événements&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;- Logs perfmon si possible&lt;/P&gt;
&lt;P&gt;- Dumps si necessaire&lt;/P&gt;
&lt;P&gt;Voici plus de précisions :&lt;/P&gt;
&lt;H4&gt;Logs IIS&lt;/H4&gt;
&lt;P&gt;Les logs IIS sont les fichiers contenus dans « C:\windows\system32\logfiles\W3SVCxxxx ». xxxx représente le numéro du site Web.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=W3SVC1 src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image002_3.jpg" width=346 height=226 mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image002_3.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Vous avez ensuite un ou plusieurs fichiers portant la date du jour&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=LogsIIS src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image004_3.jpg" width=405 height=482 mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image004_3.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Référence pour les codes IIS :&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Description of Microsoft Internet Information Services (IIS) 5.0 and 6.0 status codes - &lt;A href="http://support.microsoft.com/kb/318380/en-us" mce_href="http://support.microsoft.com/kb/318380/en-us"&gt;http://support.microsoft.com/kb/318380/en-us&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;Logs HTTPERR&lt;/H4&gt;
&lt;P&gt;Il s'agit des logs de la partie Kernel de Windows qui réceptionne les requêtes et envoie les réponses.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=HTTPERR src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image006_3.jpg" width=405 height=198 mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image006_3.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Pour analyser les messages d'erreurs contenus dans ces logs :&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Error logging in HTTP API - &lt;A href="http://support.microsoft.com/kb/820729/en-us" mce_href="http://support.microsoft.com/kb/820729/en-us"&gt;http://support.microsoft.com/kb/820729/en-us&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;Les journaux d’évènements Application, Système et Sécurité&lt;/H4&gt;
&lt;P&gt;Les journaux donnent des informations pertinentes sur les redemarrages d'IIS/des pools d'applications, sur erreurs remontés par les pools d'applications, etc...&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;WWW Service Events (IIS 6.0) - &lt;A title=http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea584d51-16b5-4be7-9e70-7c7487ca4500.mspx?mfr=true href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea584d51-16b5-4be7-9e70-7c7487ca4500.mspx?mfr=true"&gt;http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea584d51-16b5-4be7-9e70-7c7487ca4500.mspx?mfr=true&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;WWW Service Worker Process Events (IIS 6.0) - &lt;A title=http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea584d51-16b5-4be7-9e70-7c7487ca4500.mspx?mfr=true href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea584d51-16b5-4be7-9e70-7c7487ca4500.mspx?mfr=true"&gt;http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/ea584d51-16b5-4be7-9e70-7c7487ca4500.mspx?mfr=true&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Deux précisions sur les logs IIS :&lt;/P&gt;
&lt;P&gt;- Pour apprécier le temps total de traitement des requêtes par le serveur Web, nous vous conseillons d’activer le champ « time-taken » des logs IIS6. Ce champs donne le temps total de traitement de chaque requête à partir du moment où le serveur reçoit la requête jusqu’au moment où il renvoie la réponse HTTP. Cela englobe le temps de traitement Web Service et/ou Base de données sous-jacent.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=UILogIIS src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image008_3.jpg" width=476 height=462 mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image008_3.jpg"&gt; &lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=time-taken src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image010_3.jpg" width=408 height=387 mce_src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/eeb01e5d249d_9788/clip_image010_3.jpg"&gt;&lt;/P&gt;
&lt;P&gt;- Le Win32 Status peut être aussi très utile. Il est possible d’en connaitre la signification avec l’outil « Err.exe » : Microsoft Exchange Server Error Code Look-up - &lt;A target=_blank href="http://www.microsoft.com/downloads/details.aspx?familyid=be596899-7bb8-4208-b7fc-09e02a13696c&amp;amp;displaylang=en"&gt;Err.exe&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9128171" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/Debogage/default.aspx">Debogage</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Procédures de prises de dumps pour un serveur Web</title><link>http://blogs.msdn.com/sbovo/archive/2008/11/25/proceduresDePrisesDeDumpsPourUnServeurWeb.aspx</link><pubDate>Tue, 25 Nov 2008 10:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9128124</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9128124.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9128124</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9128124</wfw:comment><description>&lt;P&gt;Voici une procédure simple pour effectuer une prise de dumps sur IIS.&lt;/P&gt;
&lt;H4&gt;Utilisation d’ADPLUS.VBS&lt;/H4&gt;
&lt;P&gt;L’outil de prise de dumps est "adplus". Il est fourni avec les outils de débogage Windows téléchargeables à l’adresse - &lt;A href="http://www.microsoft.com/whdc/devtools/debugging/" mce_href="http://www.microsoft.com/whdc/devtools/debugging/"&gt;http://www.microsoft.com/whdc/devtools/debugging/&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;La démarche d’installation que je vous conseille est la suivante : &lt;/P&gt;
&lt;P&gt;- Télécharger les outils de débogage &lt;/P&gt;
&lt;P&gt;- Faire l’installation sur une machine quelconque &lt;/P&gt;
&lt;P&gt;- Copier sur le serveur Web le répertoire qui a été installé par les outils de débogage (par exemple dans « C:\debuggers\ ») &lt;/P&gt;
&lt;H4&gt;Prise d’un dump automatiquement lors d’un crash&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;Ouvrir une session avec un compte administrateur sur le serveur Web (se connecter avec « /console » si vous utilisez Terminal Serveur) &lt;/LI&gt;
&lt;LI&gt;En ligne de commande, naviguer vers le répertoire contenant les outils de débogage &lt;/LI&gt;
&lt;LI&gt;Lancer la commande suivante : « cscript.exe adplus.vbs -iis -crash -quiet ». A partir de ce moment, un débogueur est branché sur les processus IIS et prend un dump si un crash apparait &lt;/LI&gt;
&lt;LI&gt;Récupérer le répertoire nommée de la façon suivante « Crash_Mode__Date_01-11-2007__Time_18-31-1515 » &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Si vous avez beaucoup de mini-dumps, vous pouvez utiliser « cscript.exe adplus.vbs -iis -crash –quiet -nodumponfirst » pour avoir seulement un dump de second chance. &lt;/P&gt;
&lt;H4&gt;Prise d’un dump au moment du lancement de la commande &lt;/H4&gt;
&lt;P&gt;Pour une prise d’un dump immédiatement, dans le cas ou vous vous apercevez d’un problème ponctuel (application ne répondant pas, ayant de très mauvaises performances) ou dans le cas d’une fuite mémoire, la commande est « cscript.exe adplus.vbs -iis -hang -quiet » : &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Ouvrir une session avec un compte administrateur sur le serveur Web (se connecter avec « /console » si vous utilisez Terminal Serveur) &lt;/LI&gt;
&lt;LI&gt;En ligne de commande, naviguer vers le répertoire contenant les outils de débogage &lt;/LI&gt;
&lt;LI&gt;Lancer la commande suivante : « cscript.exe adplus.vbs -iis -hang -quiet ». Les dumps des processus IIS sont pris immédiatement &lt;/LI&gt;
&lt;LI&gt;Récupérer le répertoire nommée de la façon suivante « Hang_Mode__Date_01-11-2007__Time_18-31-1515 » &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;L’analyse des dumps se fait avec l’outil WinDbg (fourni avec les outils de débogage Windows) par vous et/ou par le support Microsoft.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9128124" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/Debogage/default.aspx">Debogage</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Performances de vos applications ASP.NET - Quels compteurs étudier ?</title><link>http://blogs.msdn.com/sbovo/archive/2008/10/31/PerformancesApplicationsASPNETQuelsCompteurs.aspx</link><pubDate>Fri, 31 Oct 2008 15:15:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9020294</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9020294.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9020294</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9020294</wfw:comment><description>&lt;p&gt;Les compteurs de performance sont tr&amp;#232;s nombreux et l&amp;#8217;on peut rapidement s&amp;#8217;y perdre ou perdre son temps &amp;#224; tous vouloir les utiliser. Pour &amp;#234;tre le plus productif possible, je vous propose par exp&amp;#233;rience, une liste de compteurs. Vous pouvez les &amp;#233;tudier en tout premier lieu lors de vos tests de charges. Ensuite, en fonction des r&amp;#233;sultats, vous jugerez utile d&amp;#8217;en ajouter d&amp;#8217;autres plus cibl&amp;#233;s.&lt;/p&gt;  &lt;p&gt;Voici donc une liste qui peut vous servir de point de d&amp;#233;part :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;.NET CLR Exceptions      &lt;ul&gt;       &lt;li&gt;# of Exceps Thrown/sec &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;.NET CLR Memory      &lt;ul&gt;       &lt;li&gt;# Bytes in all Heaps &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt; &lt;/li&gt;        &lt;li&gt;% Time in GC &lt;/li&gt;        &lt;li&gt;Large Object Heap size &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;ASP.NET V2      &lt;ul&gt;       &lt;li&gt;Requests Current &lt;/li&gt;        &lt;li&gt;Worker Process Restarts &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;ASP.NET Apps V2      &lt;ul&gt;       &lt;li&gt;Errors Total/sec &lt;/li&gt;        &lt;li&gt;Request Execution Time &lt;/li&gt;        &lt;li&gt;Requests/sec &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Processor      &lt;ul&gt;       &lt;li&gt;% Processsor Time _Total &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Process      &lt;ul&gt;       &lt;li&gt;% Processsor Time &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt; &lt;/li&gt;        &lt;li&gt;Virtual Bytes &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt; &lt;/li&gt;        &lt;li&gt;Private Bytes &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Web Service      &lt;ul&gt;       &lt;li&gt;Anonymous Users/sec &amp;lt;&amp;lt;NomSiteWeb&amp;gt;&amp;gt; &lt;/li&gt;        &lt;li&gt;Get Requests/sec &amp;lt;&amp;lt;NomSiteWeb&amp;gt;&amp;gt; &lt;/li&gt;        &lt;li&gt;Post Requests/sec &amp;lt;&amp;lt;NomSiteWeb&amp;gt;&amp;gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Pour r&amp;#233;f&amp;#233;rence, je vous conseille les deux chapitres du guide &amp;quot;Improving .NET Application Performance and Scalability&amp;quot;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Chapter 15 &amp;#8212; Measuring .NET Application Performance - &lt;a title="http://msdn.microsoft.com/en-us/library/ms998579.aspx" href="http://msdn.microsoft.com/en-us/library/ms998579.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms998579.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Chapter 17 &amp;#8212; Tuning .NET Application Performance - &lt;a title="http://msdn.microsoft.com/en-us/library/ms998583.aspx" href="http://msdn.microsoft.com/en-us/library/ms998583.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms998583.aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Aussi, voici un point d'entr&amp;#233;e tres interessant sur les meilleures pratiques et l'optimisation des performances&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Performance Overview - &lt;a title="http://msdn.microsoft.com/en-us/library/cc668225.aspx" href="http://msdn.microsoft.com/en-us/library/cc668225.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc668225.aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Par exemple, pour l'analyse des courbes obtenues, si vous regardez l&amp;#8217;utilisation m&amp;#233;moire, l&amp;#8217;important est de surveiller avant tout les compteurs &amp;quot;Process - Virtual Bytes &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt;&amp;quot; et &amp;quot;Process - Private Bytes &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt;&amp;quot; :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Les &amp;quot;&lt;strong&gt;Virtual Bytes&lt;/strong&gt;&amp;quot; d&amp;#8217;un processus correspondent &amp;#224; la m&amp;#233;moire r&amp;#233;serv&amp;#233;e par ce processus. Elle est de deux types : &amp;quot;Reserved&amp;quot; et &amp;quot;Committed&amp;quot;. Dans le premier cas, la m&amp;#233;moire n'est plus libre mais pas encore utilis&amp;#233;e : le processus se r&amp;#233;serve le droit d'y placer des donn&amp;#233;es. La m&amp;#233;moire &amp;quot;Committed&amp;quot; est allou&amp;#233;e et utilis&amp;#233;e : elle est pris sur la m&amp;#233;moire physique du serveur. &lt;/li&gt;    &lt;li&gt;Les &amp;quot;&lt;strong&gt;Private Bytes&lt;/strong&gt;&amp;quot; d'un processus repr&amp;#233;sentent la m&amp;#233;moire r&amp;#233;ellement utilis&amp;#233;e et prise sur la m&amp;#233;moire physique. Autrement dit : il s'agit la partie &amp;quot;Committed&amp;quot; des &amp;quot;Virtual Bytes&amp;quot; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Par cons&amp;#233;quent, si un de ces deux compteurs est en constante augmentation sans jamais redescendre, vous avez une fuite m&amp;#233;moire. Dans ce cas, d'autres compteurs pourront vous aider. Par exemple :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;quot;.NET CLR Memory - # Bytes in all Heaps &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt;&amp;quot; donne la taille m&amp;#233;moire utilis&amp;#233;e par tous les objets .NET contenus dans le processus W3WP.EXE s&amp;#233;lectionn&amp;#233;. Si ce compteur augmente aussi de la m&amp;#234;me mani&amp;#232;re, la fuite m&amp;#233;moire est provoqu&amp;#233;e par les objets manag&amp;#233;s utilis&amp;#233;s &lt;/li&gt;    &lt;li&gt;&amp;quot;Large Object Heap size &amp;lt;&amp;lt;W3WP.EXE&amp;gt;&amp;gt;&amp;quot; comprend seulement les objets .NET dits volumineux (sup&amp;#233;rieurs &amp;#224; 85 ko). La m&amp;#233;moire utilis&amp;#233;e par ces objets est particuli&amp;#232;re parce qu'elle n'est pas compact&amp;#233;e/optimis&amp;#233;e lors du passage du garbage collector. Son utilisation intensive peut provoquer de la fragmentation m&amp;#233;moire &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bon tests ou surveillances de vos applications ASP.NET :-)&lt;/p&gt;  &lt;p&gt;A bient&amp;#244;t,&lt;/p&gt;  &lt;p&gt;Sebastien.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9020294" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sbovo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/IIS/default.aspx">IIS</category></item></channel></rss>