Utiliser FREB pour générer un dump sur une requête longue en exécution


Bonjour,

Dans un précédent article, je vous expliquais comment générer un log FREB sur une erreur HTTP ou sur une requête longue en exécution.

Il est également possible de générer un dump en se basant sur une règle FREB, par exemple, lorsque la requête dépasse 15 secondes d’exécution.
L’inconvénient majeur est que l’on doit choisir entre le log FREB et le dump. C’est soit l’un, soit l’autre, mais pas les deux en même temps.

Pour ce faire :

  • Configurez votre règle FREB (si vous ne savez pas comment faire, consultez l’article suivant : http://blogs.msdn.com/friis/archive/2010/04/29/le-fonctionnement-de-freb-ou-comment-investiguer-une-erreur-http-sous-iis-7-7-5.aspx)
    Vous obtiendrez la configuration suivante dans le Web.Config de votre application :

    <?xml version=1.0 encoding=UTF-8?>
    <configuration>
        <system.webServer>
            <tracing>
                <traceFailedRequests>
                    <add path=*>
                        <traceAreas>
                            <add provider=ASP verbosity=Verbose />
                            <add provider=ASPNET areas=Infrastructure,Module,Page,AppServices verbosity=Verbose />
                            <add provider=ISAPI Extension verbosity=Verbose />
                            <add provider=WWW Server areas=Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module verbosity=Verbose />
                        </traceAreas>
                        <failureDefinitions timeTaken=00:00:15 />
                    </add>
                </traceFailedRequests>
            </tracing>
        </system.webServer>
    </configuration>

    Si vous n’avez pas autorisé la délégation, vous retrouverez la même configuration dans le fichier ApplicationHost.config situé dans le répertoire “C:\Windows\System32\Inetrsv\Config”.

  • Afin de réaliser la génération de dumps, il faut préciser à IIS que nous n’allons pas effectuer l’action par défaut, à savoir générer un log FREB, mais que nous allons effectuer une action spécifique.
    Il existe deux méthodes principales pour réaliser ceci :
    • Soit vous ouvrez le fichier ApplicationHost.config
      1. Vous recherchez <sites>
      2. Et vous ajoutez dans la partie correspondant au site web que vous voulez monitorer customActionsEnabled=true à <traceFailedRequestsLogging enabled=true />
      3. Ce qui vous donnera pour le site web par défaut :

        <sites>
            <site name=Default Web Site id=1 serverAutoStart=true>
                <application path=/>
                    <virtualDirectory path=/ physicalPath=%SystemDrive%\inetpub\wwwroot />
                </application>
                <bindings>
                    <binding protocol=http bindingInformation=*:80: />
                </bindings>
                <traceFailedRequestsLogging enabled=true customActionsEnabled=true />
            </site>
        </sites>

    • Soit vous utilisez appcmd.exe qui est l’outil de configuration de IIS en ligne de commande
      1. Ouvrez une invite de commande CMD
      2. Naviguez vers le répertoire “C:\Windows\System32\Inetsrv”
      3. Puis exécutez la commande suivante : (/[name=’x’] où x correspond au nom de votre site web)

    appcmd.exe set config -section:system.applicationHost/sites “/[name=’Default Web Site’].traceFailedRequestsLogging.customActionsEnabled:”true”” /commit:apphost

    Vous devriez donc retrouver exactement la même chose que ci-dessus dans le fichier ApplicationHost.config

  • Pour pouvoir générer un dump via une règle FREB, il faut que vous installiez ADPLUS, qui est disponible via les Debugging Tools  for Windows :
  • Il ne nous reste plus qu’à indiquer l’action spécifique que nous voulons mettre en place : générer un dump.

    Cela s’effectue au niveau du Web.Config, ou directement dans ApplicationHost.config, dans la section <system.webServer> <tracing> <traceFailedRequests>.
    Il suffit de rajouter les éléments suivants à <add path=*> :

    <add path=* customActionExe=c:\windows\system32\cscript.exe customActionParams=C:\Debuggers\adplus_old.vbs -hang -pn w3wp.exe -o c:\dumps -quiet customActionTriggerLimit=50>

    • CustomActionExe correspond à l’exécutable que l’on va lancer
    • customActionParams correspond aux paramètres que l’on passe à l’exécutable
    • Par défaut les dumps seront générés dans le répertoire C:\dumps mais vous pouvez changer cet emplacement en modifiant -o c:\dumps

    Vous devriez donc avoir un web.config / ApplicationHost.config avec un contenu similaire à celui-ci-dessous :

    <?xml version=1.0 encoding=UTF-8?>
    <configuration>
        <system.webServer>
            <tracing>
                <traceFailedRequests>
                    <add path=* customActionExe=c:\windows\system32\cscript.exe customActionParams=C:\Debuggers\adplus_old.vbs -hang -pn w3wp.exe -o c:\dumps -quiet customActionTriggerLimit=50>
                        <traceAreas>
                            <add provider=ASP verbosity=Verbose />
                            <add provider=ASPNET areas=Infrastructure,Module,Page,AppServices verbosity=Verbose />
                            <add provider=ISAPI Extension verbosity=Verbose />
                            <add provider=WWW Server areas=Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module verbosity=Verbose />
                        </traceAreas>
                        <failureDefinitions timeTaken=00:00:15 />
                    </add>
                </traceFailedRequests>
            </tracing>
        </system.webServer>
    </configuration>

    Pour information vous pouvez remplacer l’étoile de <add path=* par une page spécifique comme “default.htm” ou par une extension spécifique comme “*.aspx“.

Une fois sauvegardé, vous n’avez plus qu’à attendre que le dump soit généré.

En espérant que cet article vous sera utile.
Un grand merci à Finbar Ryan qui m’a aidé à faire fonctionner tout ceci.
@ Bientôt
Sylvain Lecerf et L’équipe de support IIS Microsoft France


Comments (2)

  1. pregunton says:

    Great post ever!

    Is good pattern and practice enable FRT in Production? low performance if FRT is enabled?

    And enable Tracing in Production environment?

    Thanks a lot

    1. FREB is meant to run even in production environments without performance degradation. Since it is just subscribing to the ETW – Even Tracing for Windows infrastructure, what we need to understand is that the evens in ETW will be raised by the incoming requests even if no one has subscribed to them. Reading from ETW is asynchronous and not done by the threads treating the requests. That being said, enabling FREB will add a bit of configuration to the web.config file, meaning that the application domain will unload.

Skip to main content