<?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]  : ASP.NET</title><link>http://blogs.msdn.com/sbovo/archive/tags/ASP.NET/default.aspx</link><description>Tags: ASP.NET</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Debogage .NET 4.0</title><link>http://blogs.msdn.com/sbovo/archive/2009/11/30/debugnet40.aspx</link><pubDate>Mon, 30 Nov 2009 20:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9927871</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/9927871.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=9927871</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=9927871</wfw:comment><description>&lt;p&gt;&lt;a title="VS2010 et .NET Fx 4.0" href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" target="_blank"&gt;Visual Studio 2010 et le .NET Framework 4&lt;/a&gt; sont disponible en Beta 2 depuis quelques semaines. Afin de vérifier un comportement qui m’a un peu surpris, je vais les utiliser pour le débogage.&lt;/p&gt;  &lt;p&gt;Voici le contexte : Dans un précédent billet, je parlais du &lt;a href="http://blogs.msdn.com/sbovo/archive/2009/07/09/deploymentretailtruepourasp-net.aspx" target="_blank"&gt;deployment retail=&amp;quot;true&amp;quot; pour ASP.NET&lt;/a&gt; en faisant référence au &lt;a title="Don’t run production ASP.NET Applications with debug=”true” enabled" href="http://weblogs.asp.net/scottgu/archive/2006/04/11/Don_1920_t-run-production-ASP.NET-Applications-with-debug_3D001D20_true_1D20_-enabled.aspx" target="_blank"&gt;billet de Scott Guthrie&lt;/a&gt;. Je pensais que retail=true était la solution pour s’affranchir du debug=true dans tous les Web.config du serveur. C’est seulement en parti vrai car le timeout des pages ASP.NET n’est pas modifié et reste démesuré si vous avez debug=true dans votre Web.config.&lt;/p&gt;  &lt;p&gt;Voici la preuve…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Page d’exemple&lt;/h3&gt;  &lt;p&gt;J’utilise un page exemple qui ne se termine jamais. Dans la vrai vie, nous aurons une boucle infinie plus complexes ou un bloclage quelconque. Dans tous les cas, le débogage est identique. Mon but est d’obtenir le timeout des pages ASP.NET. &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;&lt;/p&gt;            &lt;p&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; %&amp;gt; &lt;/p&gt;            &lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;&lt;a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;"&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/a&gt;&amp;gt; &lt;/p&gt;            &lt;p&gt;&amp;lt;script runat=&amp;quot;server&amp;quot;&amp;gt; &lt;/p&gt;            &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; protected void Page_Load(object sender, EventArgs e)              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DateTime t1 = DateTime.Now;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="background: yellow; mso-highlight: yellow"&gt;while (true)&lt;/span&gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; DateTime t2 = DateTime.Now;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }               &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;/p&gt;            &lt;p&gt;&amp;lt;html xmlns=&amp;quot;&lt;a href="http://www.w3.org/1999/xhtml&amp;quot;"&gt;http://www.w3.org/1999/xhtml&amp;quot;&lt;/a&gt;&amp;gt;               &lt;br /&gt;&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;               &lt;br /&gt;&amp;lt;/head&amp;gt;               &lt;br /&gt;&amp;lt;body&amp;gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div&amp;gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/form&amp;gt;               &lt;br /&gt;&amp;lt;/body&amp;gt;               &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Clin d’œil à Visual Studio 2010 et l’utilisation du zoom (CTRL+mollette de la souris) :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/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="VS2010" border="0" alt="VS2010" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb.png" width="544" height="321" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Cette page doit être positionnée dans un site Web utilisant un pool d’application configuré avec le Framework 4.0.&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/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="WhileTrueSite4" border="0" alt="WhileTrueSite4" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_1.png" width="544" height="353" /&gt;&lt;/a&gt; &lt;/h3&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="ASP.NET V4.0" border="0" alt="ASP.NET V4.0" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_7.png" width="342" height="238" /&gt;&lt;/p&gt;  &lt;p&gt;Avant de lancer WinDbg, naviguons vers notre page de test.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;Lancement de WinDbg, chargement des symboles et SOS&lt;/h3&gt;  &lt;p&gt;Veillez bien à lancer Windbg en tant qu’administrateur et attachez-vous au processus W3WP.EXE en cours d’exécution (F6) :&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_10.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="WinDbg" border="0" alt="WinDbg" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_2.png" width="544" height="789" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Chargement des symboles publics :&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;.sympath SRV*c:\symbols*http://msdl.microsoft.com/download/symbols/&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Chargement de SOS livré avec le .NET Framework 4.0 :&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;.load C:\Windows\Microsoft.NET\Framework\v4.0.21006\SOS&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;h3&gt;Affichage des objets&lt;/h3&gt;  &lt;p&gt;Maintenant, cherchons notre page en court d’exécution&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;!DumpHeap -type System.Web.HttpContext&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_16.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="DumpHeapHttpContext" border="0" alt="DumpHeapHttpContext" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_5.png" width="542" height="294" /&gt;&lt;/a&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;!do 062d9d18&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_18.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="HttContext" border="0" alt="HttContext" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_6.png" width="542" height="389" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Comme il s’agit d’un objet de type TimeSpan, nous devons utiliser la méthode !DumpVC (Pour information, voici le pointeur MSDN vers SOS - &lt;a title="SOS sur MSDN" href="http://msdn.microsoft.com/en-us/library/bb190764.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/bb190764.aspx&lt;/a&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;!DumpVC 532747bc 062d9dd0&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_20.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="Timeout" border="0" alt="Timeout" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_7.png" width="542" height="146" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;La valeur du timeout donnée est un nombre de ticks CPU. Sachant qu’il y a 10000 ticks par millisecondes. Pour obtenir le temps en secondes, nous devons donc diviser la valeur par 10000 puis par 1000. Utilisons Windbg comme calculatrice :&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&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;?1100000000/10000/1000&lt;/p&gt;         &lt;/font&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&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="WinDbgCommeCalculatrice" border="0" alt="WinDbgCommeCalculatrice" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_25.png" width="333" height="38" /&gt;&lt;/p&gt;  &lt;p&gt;Le timeout de la page ASPX est de 110 secondes.&lt;/p&gt;  &lt;p&gt;Nous avons bien le comportement normal et celui par défaut décrit dans le fichier &amp;quot;Web.config.comments&amp;quot; :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_27.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="web.config.comments" border="0" alt="web.config.comments" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_10.png" width="544" height="183" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Maintenant, regardons avec exactement la même démarche, ce que nous avons avec debug=true (dans Web.config) et retail=true (dans le Machine.config) :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_29.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="debugtrue" border="0" alt="debugtrue" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_11.png" width="544" height="58" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_31.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="retailtrue" border="0" alt="retailtrue" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_12.png" width="344" height="60" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Je vous passe toutes les copies d’écran, voici juste les deux dernières commandes :&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_33.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="TimeoutPourHttpContext" border="0" alt="TimeoutPourHttpContext" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/image_thumb_13.png" width="542" height="148" /&gt;&lt;/a&gt; &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="TimeoutDebug" border="0" alt="TimeoutDebug" src="http://blogs.msdn.com/blogfiles/sbovo/WindowsLiveWriter/DebugNET40_B427/66_3.png" width="385" height="41" /&gt; &lt;/p&gt;  &lt;p&gt;Le timeout est de 30 000 000 secondes soit 347 jours. Effectivement, dans ce cas, nous avons tout le temps de déboguer nos pages… Et le retail=true n’a pas changé ce comportement.&lt;/p&gt;  &lt;p&gt;La conclusion est : &lt;strong&gt;vérifiez que vous n’avez pas debug=true dans tous les Web.config en production même si vous avez retail=true&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Plutôt intéressant&amp;#160; :-) Qu’en pensez-vous ?&lt;/p&gt;  &lt;p&gt;Sebastien.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927871" 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/Outils/default.aspx">Outils</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/WinDbg/default.aspx">WinDbg</category><category domain="http://blogs.msdn.com/sbovo/archive/tags/.NET+Fx+4.0/default.aspx">.NET Fx 4.0</category></item><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>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><item><title>Comment aborder la migration ASP.NET 1.1 vers 2.0</title><link>http://blogs.msdn.com/sbovo/archive/2008/05/22/CommentAborderLaMigrationAspNet11Vers20.aspx</link><pubDate>Thu, 22 May 2008 15:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8531696</guid><dc:creator>Sebastien Bovo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/sbovo/comments/8531696.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sbovo/commentrss.aspx?PostID=8531696</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sbovo/rsscomments.aspx?PostID=8531696</wfw:comment><description>Visual Studio 2008 (et 2005) inclus un assistant de migration des projets ASP.NET. Cet assistant peut être utilisé de deux façon : 
&lt;OL&gt;
&lt;LI&gt;Migration vers le mode de projet "&lt;STRONG&gt;Web Application Project&lt;/STRONG&gt;". Ce type de projet est similaire à celui que l’on connait en Visual Studio 2003 et est conseillé pour la migration ASP.NET 1.1 vers 2.0. Cette migration permet d’utiliser toutes les fonctionnalités ASP.NET 2.0 tout en étant dans un mode projet et donc compilation en une dll unique &lt;/LI&gt;
&lt;LI&gt;Migration vers le nouveau mode de projet "&lt;STRONG&gt;Web Site Project&lt;/STRONG&gt;". Cette migration est plus délicate dans la mesure où peuvent survenir des problèmes lors de l’exécution causés par le fait que nous n’avons plus maintenant une dll unique mais plusieurs dlls &lt;/LI&gt;&lt;/OL&gt;
&lt;UL&gt;
&lt;UL&gt;
&lt;LI&gt;Par exemple, le code behind d’une page Web peut vouloir instancier un contrôle utilisateur avec LoadControl() ou bien instancier une autre page Web à partir de son nom de classe (Webform2 par exemple). Ce code ne fonctionnera pas directement parce que les classes ne sont plus dans la même dll &lt;/LI&gt;
&lt;LI&gt;De la même façon, une classe de l’application ne pourra pas instancier une classe d’une page Web parce que la dll contenant les classes ne référence pas la dll contenant les pages Web &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;D’autres points, ne provoquant pas des erreurs, sont à noter et à tester comme par exemple la présence des fichier .resx devenus inutiles.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Des tests et retours d’expérience ont permis de lister ces points. Je vous encourage à lire le document suivant : Common Web Project Conversion Issues and Solutions - &lt;A href="http://msdn2.microsoft.com/en-us/library/aa479312.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa479312.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa479312.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Voici les ressources utiles sur ce sujet : &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Upgrading VS 2003 Web Projects to be VS 2005 Web Application Projects - &lt;A href="http://webproject.scottgu.com/CSharp/Migration/Migration.aspx" mce_href="http://webproject.scottgu.com/CSharp/Migration/Migration.aspx"&gt;http://webproject.scottgu.com/CSharp/Migration/Migration.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Migrating - &lt;A href="http://msdn2.microsoft.com/en-us/library/aa530793.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa530793.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa530793.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Upgrade from ASP.NET 1.x - &lt;A href="http://msdn2.microsoft.com/en-us/asp.net/aa336650.aspx" mce_href="http://msdn2.microsoft.com/en-us/asp.net/aa336650.aspx"&gt;http://msdn2.microsoft.com/en-us/asp.net/aa336650.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Migration vers "Web site project" 
&lt;UL&gt;
&lt;LI&gt;Converting from Visual Studio .NET 2002 or 2003 - &lt;A href="http://msdn2.microsoft.com/en-us/library/3z019waa(VS.80).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/3z019waa(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/3z019waa(VS.80).aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;How to: Convert a Visual Studio .NET Project to Visual Studio 2005 - &lt;A href="http://msdn2.microsoft.com/en-us/library/ms247241(VS.80).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms247241(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms247241(VS.80).aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;Migration vers "Web Application Project" 
&lt;UL&gt;
&lt;LI&gt;Introduction to Web Application Projects - &lt;A href="http://msdn2.microsoft.com/en-us/library/aa730880(vs.80).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa730880(vs.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa730880(vs.80).aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Step-By-Step Guide to Converting Web Projects from Visual Studio .NET 2002/2003 to Visual Studio 2005 - &lt;A href="http://msdn2.microsoft.com/en-us/library/aa479567.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa479567.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa479567.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Common Web Project Conversion Issues and Solutions - &lt;A href="http://msdn2.microsoft.com/en-us/library/aa479312.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa479312.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa479312.aspx&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;ASP.NET 2.0 Migration Overview - &lt;A href="http://msdn2.microsoft.com/en-us/library/ms227549(vs.80).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms227549(vs.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms227549(vs.80).aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Concernant la pré-compilation, voici le point de départ : Selecting a Precompilation Model - &lt;A href="http://msdn2.microsoft.com/en-us/library/ms227430(vs.80).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms227430(vs.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms227430(vs.80).aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8531696" 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/Visual+Studio/default.aspx">Visual Studio</category></item></channel></rss>